如果我想拿一个&str
喜欢 "aeiou"
并将其转换为大致相当于 ["a", "e", "i", "o", "u"].iter()
的迭代器,最惯用的方法是什么?
我试过做 "aeiou".split("")
这对我来说似乎是惯用的,但我却空了 &str
s 在开头和结尾。
我试过做 "aeiou".chars()
但是从那里试图转动 char
开始变得非常丑陋和笨拙s 进入 &str
s。
目前,我只是输入["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
如果我可以制作
string_list_item_count
接受 std::str::pattern::Pattern
迭代器内部的特征,我认为这将使该函数接受 &str
的迭代器和 char
,但 Pattern
trait 是一个夜间不稳定的 API,我试图避免使用它们。
最佳答案
您可以使用 split_terminator
而不是 split
跳过迭代器末尾的空字符串。此外,如果您 skip
迭代器的第一个元素,你得到你想要的结果:
let iterator = "aeiou".split_terminator("").skip(1);
println!("{:?}", iterator.collect::<Vec<_>>());
输出:
["a", "e", "i", "o", "u"]
关于string - 在 Rust 中,将 &str 拆分为每个包含一个字符的 &strs 迭代器的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597751/