You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中有没有可统计Vec中元素出现频率的现成函数或库?

统计Vec元素频率的crate及使用方法

你可以使用Rust生态普及度极高的迭代器工具库itertools实现需求,它的维护状态和适用场景都优于你找到的frequency crate。

基础用法:频率统计

  1. 首先在Cargo.toml中添加依赖:
[dependencies]
itertools = "0.12"
  1. 代码示例:
use itertools::Itertools;

fn main() {
    let input = vec![1,1,1,4,1,2,3,5,4];
    // counts()方法直接返回存储了元素-频率映射的HashMap
    let frequency_map = input.into_iter().counts();
    // 转为你需要的Vec<(元素, 频率)>格式,输出顺序不固定
    let result: Vec<(i32, usize)> = frequency_map.into_iter().collect();
    println!("{:?}", result); // 输出示例:[(1, 4), (4, 2), (2, 1), (3, 1), (5, 1)]
}

反向功能实现

如果需要从频率统计结果还原为原始序列,可以配合标准库的repeat_n方法实现:

fn main() {
    let frequency = vec![(1,4), (2,1), (3,1), (4,2), (5,1)];
    let origin: Vec<i32> = frequency.into_iter()
        .flat_map(|(val, count)| std::iter::repeat_n(val, count))
        .collect();
    println!("{:?}", origin); // 输出:[1, 1, 1, 1, 2, 3, 4, 4, 5]
}

frequency crate的使用示例

如果你要使用你搜索到的frequency crate,使用方式如下:

  1. 添加依赖:
[dependencies]
frequency = "1.0.1"
  1. 代码示例:
use frequency::Frequency;

fn main() {
    let input = vec![1,1,1,4,1,2,3,5,4];
    let frequency_map = input.frequency_map();
    let result: Vec<(i32, usize)> = frequency_map.into_iter().collect();
    println!("{:?}", result);
}

内容的提问来源于stack exchange,提问作者Jakob E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:45:01