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 <[email protected]> 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 <[email protected]> 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