计算枚举的每个变体出现的次数

问题描述 投票:0回答:1

我正在尝试编写一个函数来计算扑克手牌。为此,我需要检查每个卡值存在多少重复项。我知道这可以通过哈希图来完成,但我想知道是否也可以通过某种静态分配的内存来完成,例如假设枚举中的变体数量在编译时已知,则为数组。

#[derive(Debug, Clone, PartialEq, Eq)]
enum Value {
    Ace,
    King,
    Queen,
    Jack,
    Ten,
    Nine,
    Eight,
    Seven,
    Six,
    Five,
    Four,
    Three,
    Two,
}

附注我很确定 rust 有一个函数,可以获取向量或切片并返回包含其中每个不同元素的计数的

HashMap
,例如

let a = vec![1, 2, 1, 3, 2, 4]
let b = a.counts();
let mut c = HashMap<i32, usize> = HashMap::new();
c.insert(1, 2);
c.insert(2, 2);
c.insert(3, 1);
c.insert(4, 1);
assert_eq(b, c);

但是,我一直没能找到它。有谁知道这个功能是什么吗?

rust count hashmap
1个回答
0
投票

没有内置函数,但使用

Iterator::fold
:

编写很简单
use std::collections::HashMap;
use std::hash::Hash;

fn counts<T: Eq + Hash>(items: impl IntoIterator<Item = T>) -> HashMap<T, usize> {
    items.into_iter().fold(HashMap::new(), |mut counts, i| {
        *counts.entry(i).or_default() += 1;
        counts
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.