计算选项集合中出现次数的惯用方法
Idiomatic way to count occurrences in a collection of Options
我想计算一个值在选项集合中出现的次数。
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();
为什么 Flatten 对 Option
有效?
来自 :由于 Option
实现了 IntoIterator
,它的行为类似于空迭代器或具有单个元素的迭代器。
- 为
None
清空 Iterator
Iterator
Some(...)
的单个元素
我想计算一个值在选项集合中出现的次数。
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();
为什么 Flatten 对 Option
有效?
来自 Option
实现了 IntoIterator
,它的行为类似于空迭代器或具有单个元素的迭代器。
- 为
None
清空 Iterator
Some(...)
的单个元素
Iterator