string - 在 Rust 中,将 &str 拆分为每个包含一个字符的 &strs 迭代器的惯用方法是什么?

标签 string generics rust iterator traits

如果我想拿一个&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/

相关文章:

c#从excel文件中获取值列表

c - 双指针运算,遍历数组字符串的字符

reactjs - React TSX 文件中的泛型

c# - 如何实现多索引字典?

rust - 带填充零的十六进制格式

rust - 通过设置变量类型和使用 `as` 进行类型转换有什么区别?

error-handling - rust Snafu crate : no method named `fail` found for enum `Error` in the current scope

python - 元音索引 : Python error "' in <string >' requires string as left operand, not int"

java - 如何在 JAVA 中使用正则表达式从字符串中提取特定文本

c# - 实现通用方法