10 个版本
0.2.2 | 2021 年 9 月 22 日 |
---|---|
0.2.1 | 2020 年 8 月 5 日 |
0.1.7 | 2020 年 7 月 15 日 |
0.1.5 | 2020 年 6 月 30 日 |
#925 in Rust 模式
每月 51 次下载
14KB
137 行
grouping-by
这个小型库为用户提供了将他们的迭代器以各种方式分组的能力。它仍在开发中,因此不建议用于生产代码。将会不断出现破坏性更改。
它类似于 Java 的 Collectors.groupingBy
示例
#[derive(Debug, PartialEq)]
struct Point {
x: i32,
y: i32,
}
let array: [Point; 4] = [
Point { x: 1, y: 2 },
Point { x: 1, y: 3 },
Point { x: 2, y: 2 },
Point { x: 2, y: 2 },
];
assert_eq!(
[
(1, vec![&Point { x: 1, y: 2 }, &Point { x: 1, y: 3 }]),
(2, vec![&Point { x: 2, y: 2 }, &Point { x: 2, y: 2 }])
]
.iter()
.cloned()
.collect::<HashMap<i32, Vec<&Point>>>(),
array.iter().grouping_by(|point| point.x)
);
更高级的使用
// This returns for each year, the contract with the most days.
contracts.iter().grouping_by_max(
|contract| contract.date.year(), // Key of HashMap
|contract1, contract2| contract1.days.cmp(&contract2.days), // Comparator to get the max
) // Returns `HashMap<i32, Contract>`
用法
只需将 trait (use grouping_by::GroupingBy;
) 导入到您的 crate 中,然后在迭代器上使用它。