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