routine classify

Documentation for routine classify assembled from the following types:

class Any

From Any

(Any) method classify

Defined as:

method classify(&mapper -->Hash:D)

Coerces the invocant to a list by applying its .list method and uses List.classify on it.

say Any.classify({ $_ }); # OUTPUT: «{(Any) => [(Any)]}␤» 

class List

From List

(List) routine classify

Defined as:

sub    classify(&mapper*@values --> Hash:D)
method classify(List:D: &mapper   --> Hash:D)

Transforms a list of values into a hash representing the classification of those values according to &mapper; each hash key represents the classification for one or more of the incoming list values, and the corresponding hash value contains an array of those list values classified by the mapper into the category of the associated key.


say classify { $_ %% 2 ?? 'even' !! 'odd' }, (17632);
# OUTPUT: «{even => [6 2], odd => [1 7 3]}␤» 
say ('hello'122/742'world').classify: { .Str.chars };
# OUTPUT: «{1 => [1], 2 => [42], 5 => [hello world], 8 => [3.142857]}␤» 

It can also take :as as a named parameter, transforming the value before classifying it:

say <Innie MInnie Moe>.classify{ $_.chars }:as{ lc $_ });
# OUTPUT: «{3 => [moe], 5 => [innie], 6 => [minnie]}␤» 

It is classifying by number of characters, but the :as block lowercases it before doing the transformation. The named parameter :into can also be used to classify into a newly defined variable:

<Innie MInnie Moe>.classify{ $_.chars }:as{ lc $_ }:intomy %words{Int} ) );
say %words# OUTPUT: «{3 => [moe], 5 => [innie], 6 => [minnie]}␤» 

We are defining %words{Int} on the fly, with keys that are actually integers; it gets created with the result of the classification.