In role Baggy§
See primary documentation in context for method categorize-list.
multi method categorize-list(&mapper, *@list --> Baggy:D) multi method categorize-list(%mapper, *@list --> Baggy:D) multi method categorize-list(@mapper, *@list --> Baggy:D)
Populates a mutable Baggy by categorizing the possibly-empty @list of values using the given mapper. The @list cannot be lazy.
say BagHash.new.categorize-list: { gather { take 'largish' if $_ > 5; take .is-prime ?? 'prime' !! 'non-prime'; take $_ %% 2 ?? 'even' !! 'odd'; } }, ^10; # OUTPUT: BagHash(largish(4) even(5) non-prime(6) prime(4) odd(5)) my %mapper = :sugar<sweet white>, :lemon<sour>, :cake('sweet', 'is-a-lie'); say MixHash.new.categorize-list: %mapper, <sugar lemon cake>; # OUTPUT: MixHash(is-a-lie sour white sweet(2))
The mapper can be a Callable that takes a single argument, an Associative, or an Iterable. With Associative and an Iterable mappers, the values in the @list represent the key and index of the mapper's value respectively. A Callable mapper will be executed once per each item in the @list, with that item as the argument and its return value will be used as the mapper's value.
The mapper's value is used as a possibly-empty list of keys of the Baggy that will be incremented by 1.
Note: unlike the Hash's .categorize-list, returning a list of Iterables as mapper's value will throw, as Baggy types do not support nested categorization. For the same reason, Baggy's .categorize-list does not accept :&as parameter.
In Hash§
See primary documentation in context for method categorize-list.
multi method categorize-list(&mapper, *@list, :&as --> Hash:D) multi method categorize-list(%mapper, *@list, :&as --> Hash:D) multi method categorize-list(@mapper, *@list, :&as --> Hash:D)
Populates a Hash by classifying the possibly-empty @list of values using the given mapper, optionally altering the values using the :&as Callable. The @list cannot be lazy.
The mapper can be a Callable that takes a single argument, an Associative, or an Iterable. With Associative and an Iterable mappers, the values in the @list represent the key and index of the mapper's value respectively. A Callable mapper will be executed once per each item in the @list, with that item as the argument and its return value will be used as the mapper's value.