如何检查事物是否在向量中

时间:2019-10-14 00:23:34

标签: rust

如何检查事物是否在矢量中?

let n= vec!["-i","mmmm"];
if "-i" in n { 
    println!("yes");
} else {
    println!("no");

我猜想我需要将其放入循环中,然后执行if "-i" in x,其中x是迭代变量。但是我希望有一个方便的方法,或者我混淆了语法,并且有类似的方法可以做到这一点。

2 个答案:

答案 0 :(得分:5)

contains上有一种Vechttps://doc.rust-lang.org/std/vec/struct.Vec.html#method.contains)方法。

示例:

let n = vec!["-i","mmmm"];

if n.contains(&"-i") { 
    println!("yes");
} else {
    println!("no");
}

它有点restrictive,例如,如果Vec<String>的类型为x,则不允许检查x是否包含&str。在这种情况下,您将必须使用@harmic

描述的.iter().any(...)方法

答案 1 :(得分:4)

虽然您可以构造一个循环,但更简单的方法是对向量​​使用迭代器上的any方法。

any带有一个返回true或false的闭包。依次为每个项目调用闭包,直到找到返回true的项目为止。请注意,迭代器返回对值的引用(因此&中的|&i|)。

let n= vec!["-i","mmmm"];

if n.iter().any(|&i| i=="-i") {
    println!("Yes");
}

由于any在迭代器上运行,因此可以与任何类型的容器一起使用。迭代器上有很多类似的方法,例如allfind等。请参见Iterators的标准库文档。