Ok got it. But solution is neither more readable nor faster (IMHO only
-> I didn't benchmark it)


class A { has $.a; has $.b };
my @array = A.new(a=>'a', b=>'11'),
    A.new(a=>'a', b=>'22'),
    A.new(a=>'v', b=>'33'),
    A.new(a=>'w', b=>'44'),
    A.new(a=>'v', b=>'55');

my %h = @array.map({
    my $var = .a;
    $var => %(@array.grep({.a eq $var}).map({.b => $_}))
           });

say %h<a>.perl;

my %hash;
for @array -> $elem {
    %hash{$elem.a}{$elem.b} =$elem;
}


say "Reference\n" ~ %hash<a>.perl;


On Fri, Jun 13, 2014 at 4:49 PM, Kamil Kułaga <teodoz...@gmail.com> wrote:
> Hi Tobias,
>
> Almost. At least at my rakudo creates list of hash of hash and loses
> data while converting to hash:
>
> ("a" => "11" => A.new(a => "a", b => "11"), "a" => "22" => A.new(a =>
> "a", b => "22"), "v" => "33" => A.new(a => "v", b => "33"), "w" =>
> "44" => A.new(a => "w", b => "44"), "v" => "55" => A.new(a => "v", b
> => "55")).list.item
>
>
> On Fri, Jun 13, 2014 at 2:30 PM, Tobias Leich <em...@froggs.de> wrote:
>> Hi, like that?
>>
>> class A { has $.a; has $.b };
>> my @array = A.new(a=>'a', b=>'11'),
>>             A.new(a=>'a', b=>'22'),
>>             A.new(a=>'v', b=>'33'),
>>             A.new(a=>'w', b=>'44'),
>>             A.new(a=>'v', b=>'55');
>>
>> say @array.map({ .a => .b => $_ })
>>
>> OUTPUT«"a" => "11" => A.new(a => "a", b => "11") "a" => "22" => A.new(a
>> => "a", b => "22") "v" => "33" => A.new(a => "v", b => "33") "w" => "44"
>> => A.new(a => "w", b => "44") "v" => "55" => A.new(a => "v", b => "55")␤»
>>
>> Am 13.06.2014 12:36, schrieb Kamil Kułaga:
>>> Hi,
>>>
>>> I was wondering whether following code can be rewritten using map/grep
>>> construct.
>>>
>>>
>>>     class A {
>>>        has $.a;
>>>        has $.b;
>>>    }
>>>
>>>
>>>    my @array= (
>>>    A.new(a=>'a', b=>'11'),
>>>    A.new(a=>'a', b=>'22'),
>>>    A.new(a=>'v', b=>'33'),
>>>    A.new(a=>'w', b=>'44'),
>>>    A.new(a=>'v', b=>'55')
>>>    );
>>>
>>>
>>>
>>>    my %hash;
>>>    for @array -> $elem {
>>>    %hash{$elem.a}{$elem.b} =$elem;
>>>     }
>>>
>>>
>>>     say %hash.perl;
>>>
>>> Can it?
>>>
>>>
>>
>
>
>
> --
> Pozdrawiam
>
> Kamil Kułaga



-- 
Pozdrawiam

Kamil Kułaga

Reply via email to