5 string generics iterator traits rust
如果我想点&str赞"aeiou"并将其转换为大致相当于 的迭代器["a", "e", "i", "o", "u"].iter(),那么最惯用的方法是什么?
我试过做"aeiou".split("")这对我来说似乎是惯用的,但我&str在开始和结束时都得到了空的s。
我试过这样做,"aeiou".chars()但从那里试图将chars 变成&strs变得非常丑陋和笨拙。
目前,我只是输入了["a", "e", "i", "o", "u"].iter(),但必须有一种更简单、更惯用的方式。
对于上下文,我最终将遍历每个值并将其传递给类似string.matches(vowel).count().
这是我的整体代码。也许我在别的地方误入歧途了。
fn string_list_item_count<'a, I>(string: &str, list: I) -> usize
where
I: IntoIterator<Item = &'a str>,
{
let mut num_instances = 0;
for item in list {
num_instances += string.matches(item).count();
}
num_instances
}
// snip
string_list_item_count(string, vec!["a", "e", "i", "o", "u"])
// snip
Run Code Online (Sandbox Code Playgroud)
如果我可以在迭代器中string_list_item_count接受std::str::pattern::Patterntrait,我认为这将使这个函数接受&strand 的迭代器char,但Patterntrait 是一个夜间不稳定的 API,我试图避免使用它们。
您可以使用split_terminator而不是split跳过迭代器末尾的空字符串。此外,如果你skip是迭代器的第一个元素,你会得到你想要的结果:
let iterator = "aeiou".split_terminator("").skip(1);
println!("{:?}", iterator.collect::<Vec<_>>());
Run Code Online (Sandbox Code Playgroud)
输出:
["a", "e", "i", "o", "u"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |