我想计算选项集合中某个值出现的次数。
let v = vec![Some(1), Some(1), Some(3), None];
v.iter()
.filter(|Some(x)| x == &1)
.count();
这样做会产生
refutable pattern not covered
错误,这是有道理的。我通过这样做解决了
v.iter()
.filter(|x| x.is_some() && x.unwrap() == &1)
.count()
rust 的惯用方法是什么?
最佳答案
您可以使用flatten
摆脱None
并解包Some(...)
值。
代码:
let one_count = v.iter().flatten().filter(|x| **x == 1).count();
要计算
None
,您可以简单地使用以下代码:let none_count = v.len() - v.iter().flatten().count();
Playground
为什么Flatten适用于
Option
? 来自@E_net4 's comment:由于
Option
实现了IntoIterator
,因此它的行为类似于空迭代器或具有单个元素的迭代器。Iterator
的空None
Iterator
Some(...)
关于rust - 计数选项集合中出现次数的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61928390/