是否有等效于python中的any方法的方法

m.r*_*nal 1 syntactic-sugar any rust

anyPython的标准库中有一个非常方便的函数,该函数允许检查给定可迭代项中是否有任何项验证了某种条件。

my_list = [1, 3, 4, 5, 8]

# using any
four_is_present = any(elem == 4 for elem in my_list)

# is equivalent to
four_is_present = False
for elem in my_list:
    if elem == 4:
        four_is_present = True
        break
Run Code Online (Sandbox Code Playgroud)

我想知道Rust中是否有等效的语法糖,或者我是否必须选择“更长”的表达方式。

hel*_*low 5

是。在Iterator::anyIterator上有一种方法(与Python相比,Python是一个接受Iterator的独立函数)。

您可以像其他任何方法一样调用它。

fn main() {
    let my_list = vec![1, 3, 4, 5, 8];
    println!("{}", my_list.iter().any(|&i| i == 4));
}
Run Code Online (Sandbox Code Playgroud)

如果仍然使用Vecslice,则可以使用contains它将any实现中使用方法的方法。

fn main() {
    let my_list = vec![1, 3, 4, 5, 8];
    println!("{}", my_list.contains(&4));
}
Run Code Online (Sandbox Code Playgroud)

API文档也将列出其他有用的方法,例如allchainzipmapfilter。在文档中也有这些方法的示例,都值得一读。