#iterator #traits #grouping #user #user-group #ways #i32

grouping_by

一个简单的库,允许用户以各种方式对迭代器进行分组

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 模式

Download history 41/week @ 2024-03-17 7/week @ 2024-03-24 24/week @ 2024-03-31 5/week @ 2024-04-07 16/week @ 2024-04-14 30/week @ 2024-04-21 16/week @ 2024-04-28 8/week @ 2024-05-05 8/week @ 2024-05-12 12/week @ 2024-05-19 15/week @ 2024-05-26 13/week @ 2024-06-02 33/week @ 2024-06-09 6/week @ 2024-06-16 9/week @ 2024-06-23 1/week @ 2024-06-30

每月 51 次下载

MIT 许可协议

14KB
137

grouping-by

Crates.io Documentation

这个小型库为用户提供了将他们的迭代器以各种方式分组的能力。它仍在开发中,因此不建议用于生产代码。将会不断出现破坏性更改。

它类似于 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 中,然后在迭代器上使用它。

无运行时依赖