如何检查 Rust 向量中是否包含某个元素?
使用 trait SliceExt 中的 contains() 方法
你的直觉是对的——contains() 方法确实存在,但它并非直接定义在 Vec 上,而是来自 trait SliceExt。在 Rust 中,Vec 可以自动解引用为切片(slice),因此你可以直接调用 contains(),但需要确保 trait 在作用域内。实际上,对于基本类型如 i32,contains() 方法通常可用,因为标准库的 prelude 已经导入了必要的 trait。你的代码应该能工作,但可能你使用的 Rust 版本较旧或存在其他问题。请确保你的 Rust 版本是最新的(通过 rustc --version 检查)。如果问题依旧,尝试显式导入:use std::slice::SliceExt;。不过在现代 Rust 中,这通常不是必需的。
更常见的方法是使用迭代器:numbers.iter().any(|&x| x == 5)。这更灵活,且不依赖特定 trait。
示例:
```rust
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
if numbers.iter().any(|&x| x == 5) {
println!("找到了!");
}
}
```
或者使用 contains() 方法(如果可用):
```rust
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
if numbers.contains(&5) {
println!("找到了!");
}
}
```
注意传递的是引用 &5,因为 contains() 接受引用参数。