This is the generic way to perform any operation on a GroupingMap
.\nIt’s suggested to use this method only to implement custom operations\nwhen the already provided ones are not enough.
Groups elements from the GroupingMap
source by key and applies operation
to the elements\nof each group sequentially, passing the previously accumulated value, a reference to the key\nand the current element as arguments, and stores the results in an HashMap
.
The operation
function is invoked on each element with the following parameters:
If operation
returns Some(element)
then the accumulator is updated with element
,\notherwise the previous accumulation is discarded.
Return a HashMap
associating the key of each group with the result of aggregation of\nthat group’s elements. If the aggregation of the last element of a group discards the\naccumulator then there won’t be an entry associated to that group’s key.
use itertools::Itertools;\n\nlet data = vec![2, 8, 5, 7, 9, 0, 4, 10];\nlet lookup = data.into_iter()\n .into_grouping_map_by(|&n| n % 4)\n .aggregate(|acc, _key, val| {\n if val == 0 || val == 10 {\n None\n } else {\n Some(acc.unwrap_or(0) + val)\n }\n });\n\nassert_eq!(lookup[&0], 4); // 0 resets the accumulator so only 4 is summed\nassert_eq!(lookup[&1], 5 + 9);\nassert_eq!(lookup.get(&2), None); // 10 resets the accumulator and nothing is summed afterward\nassert_eq!(lookup[&3], 7);\nassert_eq!(lookup.len(), 3); // The final keys are only 0, 1 and 2
Groups elements from the GroupingMap
source by key and applies operation
to the elements\nof each group sequentially, passing the previously accumulated value, a reference to the key\nand the current element as arguments, and stores the results in a new map.
init
is called to obtain the initial value of each accumulator.
operation
is a function that is invoked on each element with the following parameters:
Return a HashMap
associating the key of each group with the result of folding that group’s elements.
use itertools::Itertools;\n\n#[derive(Debug, Default)]\nstruct Accumulator {\n acc: usize,\n}\n\nlet lookup = (1..=7)\n .into_grouping_map_by(|&n| n % 3)\n .fold_with(|_key, _val| Default::default(), |Accumulator { acc }, _key, val| {\n let acc = acc + val;\n Accumulator { acc }\n });\n\nassert_eq!(lookup[&0].acc, 3 + 6);\nassert_eq!(lookup[&1].acc, 1 + 4 + 7);\nassert_eq!(lookup[&2].acc, 2 + 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and applies operation
to the elements\nof each group sequentially, passing the previously accumulated value, a reference to the key\nand the current element as arguments, and stores the results in a new map.
init
is the value from which will be cloned the initial value of each accumulator.
operation
is a function that is invoked on each element with the following parameters:
Return a HashMap
associating the key of each group with the result of folding that group’s elements.
use itertools::Itertools;\n\nlet lookup = (1..=7)\n .into_grouping_map_by(|&n| n % 3)\n .fold(0, |acc, _key, val| acc + val);\n\nassert_eq!(lookup[&0], 3 + 6);\nassert_eq!(lookup[&1], 1 + 4 + 7);\nassert_eq!(lookup[&2], 2 + 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and applies operation
to the elements\nof each group sequentially, passing the previously accumulated value, a reference to the key\nand the current element as arguments, and stores the results in a new map.
This is similar to fold
but the initial value of the accumulator is the first element of the group.
operation
is a function that is invoked on each element with the following parameters:
Return a HashMap
associating the key of each group with the result of folding that group’s elements.
use itertools::Itertools;\n\nlet lookup = (1..=7)\n .into_grouping_map_by(|&n| n % 3)\n .fold_first(|acc, _key, val| acc + val);\n\nassert_eq!(lookup[&0], 3 + 6);\nassert_eq!(lookup[&1], 1 + 4 + 7);\nassert_eq!(lookup[&2], 2 + 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and collects the elements of each group in\nan instance of C
. The iteration order is preserved when inserting elements.
Return a HashMap
associating the key of each group with the collection containing that group’s elements.
use itertools::Itertools;\nuse std::collections::HashSet;\n\nlet lookup = vec![0, 1, 2, 3, 4, 5, 6, 2, 3, 6].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .collect::<HashSet<_>>();\n\nassert_eq!(lookup[&0], vec![0, 3, 6].into_iter().collect::<HashSet<_>>());\nassert_eq!(lookup[&1], vec![1, 4].into_iter().collect::<HashSet<_>>());\nassert_eq!(lookup[&2], vec![2, 5].into_iter().collect::<HashSet<_>>());\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the maximum of each group.
If several elements are equally maximum, the last element is picked.
\nReturns a HashMap
associating the key of each group with the maximum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .max();\n\nassert_eq!(lookup[&0], 12);\nassert_eq!(lookup[&1], 7);\nassert_eq!(lookup[&2], 8);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the maximum of each group\nwith respect to the specified comparison function.
If several elements are equally maximum, the last element is picked.
\nReturns a HashMap
associating the key of each group with the maximum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .max_by(|_key, x, y| y.cmp(x));\n\nassert_eq!(lookup[&0], 3);\nassert_eq!(lookup[&1], 1);\nassert_eq!(lookup[&2], 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the element of each group\nthat gives the maximum from the specified function.
If several elements are equally maximum, the last element is picked.
\nReturns a HashMap
associating the key of each group with the maximum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .max_by_key(|_key, &val| val % 4);\n\nassert_eq!(lookup[&0], 3);\nassert_eq!(lookup[&1], 7);\nassert_eq!(lookup[&2], 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the minimum of each group.
If several elements are equally minimum, the first element is picked.
\nReturns a HashMap
associating the key of each group with the minimum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .min();\n\nassert_eq!(lookup[&0], 3);\nassert_eq!(lookup[&1], 1);\nassert_eq!(lookup[&2], 5);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the minimum of each group\nwith respect to the specified comparison function.
If several elements are equally minimum, the first element is picked.
\nReturns a HashMap
associating the key of each group with the minimum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .min_by(|_key, x, y| y.cmp(x));\n\nassert_eq!(lookup[&0], 12);\nassert_eq!(lookup[&1], 7);\nassert_eq!(lookup[&2], 8);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and finds the element of each group\nthat gives the minimum from the specified function.
If several elements are equally minimum, the first element is picked.
\nReturns a HashMap
associating the key of each group with the minimum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .min_by_key(|_key, &val| val % 4);\n\nassert_eq!(lookup[&0], 12);\nassert_eq!(lookup[&1], 4);\nassert_eq!(lookup[&2], 8);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and find the maximum and minimum of\neach group.
If several elements are equally maximum, the last element is picked.\nIf several elements are equally minimum, the first element is picked.
\nSee .minmax() for the non-grouping version.
\nDifferences from the non grouping version:
\nMinMaxResult::NoElements
Returns a HashMap
associating the key of each group with the minimum and maximum of that group’s elements.
use itertools::Itertools;\nuse itertools::MinMaxResult::{OneElement, MinMax};\n\nlet lookup = vec![1, 3, 4, 5, 7, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .minmax();\n\nassert_eq!(lookup[&0], MinMax(3, 12));\nassert_eq!(lookup[&1], MinMax(1, 7));\nassert_eq!(lookup[&2], OneElement(5));\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and find the maximum and minimum of\neach group with respect to the specified comparison function.
If several elements are equally maximum, the last element is picked.\nIf several elements are equally minimum, the first element is picked.
\nIt has the same differences from the non-grouping version as minmax
.
Returns a HashMap
associating the key of each group with the minimum and maximum of that group’s elements.
use itertools::Itertools;\nuse itertools::MinMaxResult::{OneElement, MinMax};\n\nlet lookup = vec![1, 3, 4, 5, 7, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .minmax_by(|_key, x, y| y.cmp(x));\n\nassert_eq!(lookup[&0], MinMax(12, 3));\nassert_eq!(lookup[&1], MinMax(7, 1));\nassert_eq!(lookup[&2], OneElement(5));\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and find the elements of each group\nthat gives the minimum and maximum from the specified function.
If several elements are equally maximum, the last element is picked.\nIf several elements are equally minimum, the first element is picked.
\nIt has the same differences from the non-grouping version as minmax
.
Returns a HashMap
associating the key of each group with the minimum and maximum of that group’s elements.
use itertools::Itertools;\nuse itertools::MinMaxResult::{OneElement, MinMax};\n\nlet lookup = vec![1, 3, 4, 5, 7, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .minmax_by_key(|_key, &val| val % 4);\n\nassert_eq!(lookup[&0], MinMax(12, 3));\nassert_eq!(lookup[&1], MinMax(4, 7));\nassert_eq!(lookup[&2], OneElement(5));\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and sums them.
This is just a shorthand for self.fold_first(|acc, _, val| acc + val)
.\nIt is more limited than Iterator::sum
since it doesn’t use the Sum
trait.
Returns a HashMap
associating the key of each group with the sum of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .sum();\n\nassert_eq!(lookup[&0], 3 + 9 + 12);\nassert_eq!(lookup[&1], 1 + 4 + 7);\nassert_eq!(lookup[&2], 5 + 8);\nassert_eq!(lookup.len(), 3);
Groups elements from the GroupingMap
source by key and multiply them.
This is just a shorthand for self.fold_first(|acc, _, val| acc * val)
.\nIt is more limited than Iterator::product
since it doesn’t use the Product
trait.
Returns a HashMap
associating the key of each group with the product of that group’s elements.
use itertools::Itertools;\n\nlet lookup = vec![1, 3, 4, 5, 7, 8, 9, 12].into_iter()\n .into_grouping_map_by(|&n| n % 3)\n .product();\n\nassert_eq!(lookup[&0], 3 * 9 * 12);\nassert_eq!(lookup[&1], 1 * 4 * 7);\nassert_eq!(lookup[&2], 5 * 8);\nassert_eq!(lookup.len(), 3);
source
. Read more