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

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

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

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

60086 次浏览

While you could construct a loop, an easier way would be to use the any method on an iterator for your vector.

any takes a closure that returns true or false. The closure is called for each of the items in turn until it finds one that returns true. Note that the iterator returns references to the values (thus the & in |&i|).

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


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

Since any operates on iterators, it can be used with any type of container. There are a large number of similar methods available on iterators, such as all, find, etc. See the standard library documentation for Iterators.

There is the contains (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.contains) method on Vec.

Example:

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


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

It is somewhat restrictive, for instance it doesn't allow checking if a Vec<String> contains x if x is of type &str. In that case, you will have to use the .iter().any(...) method described by @harmic