首页 > 解决方案 > 是否有等效于python中的`any`方法

问题描述

在 Python 的标准库中调用了一个非常方便的函数any,它允许检查给定迭代中的任何项是否验证了某些条件。

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

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

标签: rustanysyntactic-sugar

解决方案


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

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

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

如果您仍然使用 aVec或 a slice,则可以使用containswhich 将在其 implementationany中使用该方法。

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

API 文档还将列出其他有用的方法,例如allchain、或。文档中还有这些方法的示例,都值得一读。zipmapfilter


推荐阅读