是否有计算 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