是否有计算 Vec 中频率的 Rust 函数?
Is there a Rust function which counts frequencies in a Vec?
我想计算给定 Vec
中所有元素的频率,例如像
count_frequencies(vec![1,1,1,4,1,2,3,5,4])
应该return以下Vec
:
[(1,4), (2,1), (3,1), (4,2), (5,1)]
(顺序无关紧要)。虽然我知道如何实现这样的功能,但在我看来,某些板条箱中应该已经有一个现有的实现。经过一番谷歌搜索后,我只找到了一个名为 frequency
的箱子,但在文档中没有找到任何示例。
所以,我的问题是:是否有一个箱子可以完成这个任务,如果有,我该如何使用它?
编辑:如果您也知道另一个方向的函数,我也会对此感兴趣:)
不是真的需要,因为它是单行的:
let frequencies = v
.iter()
.copied()
.fold(HashMap::new(), |mut map, val|{
map.entry(val)
.and_modify(|frq|*frq+=1)
.or_insert(1);
map
});
不同的任务有不同的要求,所以没有必要为此制定一些标准方法。
Itertools 提供 counts
,但您必须自己将结果 (HashMap
) 转换为 Vec
。
或者,对向量进行排序(成本为 O(n log n),但在实践中可能比基于 HashMap 的方法更快)并对排序后的向量使用 dedup_with_count
。
我想计算给定 Vec
中所有元素的频率,例如像
count_frequencies(vec![1,1,1,4,1,2,3,5,4])
应该return以下Vec
:
[(1,4), (2,1), (3,1), (4,2), (5,1)]
(顺序无关紧要)。虽然我知道如何实现这样的功能,但在我看来,某些板条箱中应该已经有一个现有的实现。经过一番谷歌搜索后,我只找到了一个名为 frequency
的箱子,但在文档中没有找到任何示例。
所以,我的问题是:是否有一个箱子可以完成这个任务,如果有,我该如何使用它?
编辑:如果您也知道另一个方向的函数,我也会对此感兴趣:)
不是真的需要,因为它是单行的:
let frequencies = v
.iter()
.copied()
.fold(HashMap::new(), |mut map, val|{
map.entry(val)
.and_modify(|frq|*frq+=1)
.or_insert(1);
map
});
不同的任务有不同的要求,所以没有必要为此制定一些标准方法。
Itertools 提供 counts
,但您必须自己将结果 (HashMap
) 转换为 Vec
。
或者,对向量进行排序(成本为 O(n log n),但在实践中可能比基于 HashMap 的方法更快)并对排序后的向量使用 dedup_with_count
。