我正在尝试编写一个函数来计算扑克手牌。为此,我需要检查每个卡值存在多少重复项。我知道这可以通过哈希图来完成,但我想知道是否也可以通过某种静态分配的内存来完成,例如假设枚举中的变体数量在编译时已知,则为数组。
#[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);
但是,我一直没能找到它。有谁知道这个功能是什么吗?
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
})
}