loops - 如何检查 Vec 中的值是否为 None?

标签 loops rust vec

如果该索引处没有任何内容但该索引仍然存在,我想使用 Vec.last() 返回 None 的事实。问题是我找不到将结果与 whileif 中的任何内容进行比较的方法。但是,如果我使用 match,我可以比较它,尽管这似乎不如使用 while 循环有效。有没有办法在 ifwhile 循环中比较它?

这就是我想要做的,但是 self.particles.last() == None 是无效的,因为你不能将事物与 None 进行比较据我所知,除了

while vec.last() == None {
    num += 1;
}

最佳答案

我会使用 Option::is_none :

while vec.last().is_none() {
    ...
}

但这很无聊。我们在这里学习。也许有一个令人费解的、难以阅读的选项,我们可以在其中展示我们的 Rust 肌肉?正好,有!让我们来看看我最喜欢的 Rust 功能之一,模式匹配。

那是什么?好吧,通常你会写这样的东西,只要我们得到 Some 项并同时将这些项绑定(bind)到一个变量,它就会循环:

while let Some(elem) = vec.last() {
    ...
}

Some(elem) 是一种模式。事实证明,None 扮演了相同的语法角色。这是一种模式,尽管没有变量:

while let None = vec.last() {
    ...
}

我承认没有变量的 let 看起来很奇怪,左边有 None 看起来有点倒退,但它确实有效。

(此外,我应该指出,如果您不修改 vec,这将是一个无限循环。)

关于loops - 如何检查 Vec 中的值是否为 None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70194299/

相关文章:

algorithm - 如何将集合的元素分组为N个部分的所有组合?

javascript - 如何使用 Javascript 循环遍历数组并更改和添加额外的 HTML,以输出带有这些值的一些文本?

serialization - 我如何反序列化为特征,而不是具体类型?

php - 如何在 Wordpress 中使用图像 ID 数组显示分页图像?

python - 如何使用 Rust 使用默认程序启动任何文件(如 Python 的 `os.startfile()` )

iterator - 编写迭代器

rust - 如何从 Vec<u8> 写入文件?

rust - 如何使用原始索引保留矢量元素?

java - 获取循环外的信息

python - 在Python中循环类的一些变量