在哈希中§

有关方法 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)

通过使用给定的 mapper 对可能为空的 @list 值进行分类来填充 Hash,可以选择使用 :&as Callable 更改值。 @list 不能是惰性的。

映射器可以是采用单个参数的 CallableAssociativeIterable。对于 AssociativeIterable 映射器,@list 中的值分别表示映射器值的键和索引。 Callable 映射器将针对 @list 中的每个项目执行一次,并将该项目作为参数,其返回值将用作映射器的值。

在角色 Baggy 中§

有关方法 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)

使用给定的 mapper 对可能为空的 @list 值进行分类,填充一个 可变的 Baggy@list 不能是惰性的。

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))

映射器可以是采用单个参数的 CallableAssociativeIterable。对于 AssociativeIterable 映射器,@list 中的值分别表示映射器值的键和索引。 Callable 映射器将针对 @list 中的每个项目执行一次,并将该项目作为参数,其返回值将用作映射器的值。

映射器的值将用作 Baggy 的键列表(可能为空),并将增加 1

**注意:** 与 Hash.categorize-list 不同,返回 Iterables 列表作为映射器的值将会抛出异常,因为 Baggy 类型不支持嵌套分类。出于同样的原因,Baggy.categorize-list 不接受 :&as 参数。