Avatar ·

如何检查 Rust 向量中是否包含某个元素?

你好!我是 Rust 新手,正在尝试理解向量。我有一个 `Vec`,需要检查其中是否包含某个特定数字。在其他语言(比如 JavaScript 或 Python)中,我只需写 `if (array.includes(5))` 或 `if 5 in list:`,但在 Rust 中我找不到类似的方法。 这是我的代码: ```rust fn main() { let numbers = vec![1, 2, 3, 4, 5]; if numbers.contains(5) { println!("找到了!"); } } ``` 但编译器报错:"no method named `contains` found for struct `Vec` in the current scope"。我尝试查阅文档,但方法太多,让我困惑了。也许我做错了什么?如何正确检查向量中是否包含某个元素?是否需要导入什么?希望能有带解释的示例,谢谢! <<>>

使用 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() 接受引用参数。