将Vec <String>传递为IntoIterator <&'a str>

卢纳隆

我有一个应该从单词列表中选择随机单词的函数:

pub fn random_words<'a, I, R>(rng: &mut R, n: usize, words: I) -> Vec<&'a str>
where
    I: IntoIterator<Item = &'a str>,
    R: rand::Rng,
{
    rand::sample(rng, words.into_iter(), n)
}

大概这是一个合理的签名:由于我实际上在函数中不需要字符串本身,因此处理引用比获取full更有效String

如何Vec<String>将我的程序从文件中读取的单词优雅而有效地传递给此函数?我到目前为止:

extern crate rand;

fn main() {
    let mut rng = rand::thread_rng();
    let wordlist: Vec<String> = vec!["a".to_string(), "b".to_string()];

    let words = random_words(&mut rng, 4, wordlist.iter().map(|s| s.as_ref()));
}

那是正确的方法吗?我可以在不显式映射单词列表以获取参考的情况下编写此代码吗?

oli_obk

您可以将泛型函数更改为采用任何可以转换为a&str的函数,而不是采用可以生成a的迭代器&str

pub fn random_words<'a, I, R, J>(rng: &mut R, n: usize, words: I) -> Vec<&'a str>
where
    I: IntoIterator<Item = &'a J>,
    J: AsRef<str> + 'a,
    R: rand::Rng,
{
    rand::sample(rng, words.into_iter().map(AsRef::as_ref), n)
}
let words: Vec<&str> = random_words(&mut rng, 4, &wordlist);

本书甚至有一整章专门讨论这个主题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将 String 或 str& 转换为 Vec<String>?

如何在Rust中将Vec <String>和Vec <str>都接受为函数arg

将Vec <String>转换为Rust中的&str的一部分?

如何将Vec <String>扩展为HashMap值?

将String :: as_str传递给Option <String> :: map()失败,并出现类型不匹配错误

将&Vec <char>强制转换为&str

可以将.Net String传递给不复制的fn(const char16_t * str)吗?

将 vec<&String> 转换为 vec<String> 哪种方式更好

将切片作为IntoIterator传递

为HashMap <_,String>返回默认的&str

如何将 Vec<Item> 转换为 Vec<String>?

YAML解组错误无法将!! str``解组为str

将变量传递给 str.match 以将字符串分段为所需的长度

如何将(String,String)元组上的Iterator转换为(&str,&str)的Iterator?

将Vec <u64>转换为Vec <(&str,u64)>以获得tui :: BarChart数据

pyside / pyqt:将str()转换为QTreeWidgetItem()时,str()缩短为str()的[0]

为什么glm :: vec将vec值表示为并集?

如何通过Iterator <String>作为Iterator <&str>传递?

为什么在使用Vec :: contains时&str不强制为&String?

String,&str,Vec <u8>和&[u8]的惯用转换

将String转换为&str的惯用方式是什么?

将 &[Box<[u8]>] 转换为 String 或 &str

为什么将str封装在String而不是Box <str>中?

将变量传递到Python中为JSON的String vale

没有为`&str`实现特质`Borrow <String>

如何获得小写的 &str vec?

将str传递给SQL炼金术查询

将列表传递给 str.contains - Pandas

熊猫将NULL读取为NaN浮点而不是str