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

971*_*278 1 rust

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

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

我猜,我需要把这个循环,然后做if "-i" in x在那里x是ITER变种。但是我希望有一个方便的方法,或者我混淆了语法,并且有类似的方法可以做到这一点。

har*_*mic 59

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

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

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

if n.iter().any(|&i| i=="-i") {
    println!("Yes");
}
Run Code Online (Sandbox Code Playgroud)

由于any对迭代器进行操作,因此它可以与任何类型的容器一起使用。有大量的关于迭代器提供类似的方法,如allfind等见标准库文件Iterators


Pri*_*six 5

在上有containshttps://doc.rust-lang.org/std/vec/struct.Vec.html#method.contains)方法Vec

例:

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

if n.contains(&"-i") { 
    println!("yes");
} else {
    println!("no");
}
Run Code Online (Sandbox Code Playgroud)

它在某种程度上是限制性的,例如它不允许检查是否Vec<String>包含xif x类型&str。在这种情况下,您将必须使用.iter().any(...)@harmic描述的方法