我可以在分类Perl 6列表时修改值吗?

bri*_*foy 6 hash list perl6

List.classify方法可通过一些映射我定义变换成列表的散列.该映射的结果是散列键和原始值

my @list = (
    <Camelia 5>,
    <Camelia 6>,
    <Camelia 7>,
    <Amelia 1>,
    <Amelia 2>,
    <Amelia 3>
    );

my %hash = @list.classify: *.[0];

say %hash;
Run Code Online (Sandbox Code Playgroud)

哈希值是列表列表,因为它分类的原始thinygs是列表:

{
Amelia => [(Amelia 1) (Amelia 2) (Amelia 3)],
Camelia => [(Camelia 5) (Camelia 6) (Camelia 7)]
}
Run Code Online (Sandbox Code Playgroud)

但是,我真的想要这个:

{
Amelia => ( 1 2 3 ),
Camelia => ( 5 6 7 )
}
Run Code Online (Sandbox Code Playgroud)

我可以做一些额外的工作,但这似乎有点太多的工作:

my @list = (
    <Camelia 5>,
    <Camelia 6>,
    <Camelia 7>,
    <Amelia 1>,
    <Amelia 2>,
    <Amelia 3>
    );

my %hash = @list
    .classify( *.[0] )
    .kv
    .map( {
        $^a => $^b.map: *.[*-1]
        } )
    ;

say %hash;
Run Code Online (Sandbox Code Playgroud)

sml*_*mls 9

你可以使用:as副词:

my @list = (
    <Camelia 5>,
    <Camelia 6>,
    <Camelia 7>,
    <Amelia 1>,
    <Amelia 2>,
    <Amelia 3>
    );

my %hash = @list.classify: *.[0], as => *.[1];

say %hash;  # {Amelia => [1 2 3], Camelia => [5 6 7]}
Run Code Online (Sandbox Code Playgroud)

(不幸的是,它似乎还没有记录.)