> On 2 Apr 2020, at 23:49, Konrad Bucheli via perl6-users > <perl6-us...@perl.org> wrote: > I have a hash with arrays as value. Out of that I wanted to get a flat list > with all the entries in the value arrays. My first intuitive attempt was to > use flat, but somehow that only works with an additional map step: > > $ raku > To exit type 'exit' or '^D' >> my %hash-with-arrays = a => [1,2], b => [2,3] > {a => [1 2], b => [2 3]} >> %hash-with-arrays.values.flat > ([2 3] [1 2]) >> %hash-with-arrays.values>>.map({$_}) > ((2 3) (1 2)) >> %hash-with-arrays.values>>.map({$_}).flat > (2 3 1 2) >> > $ raku -v > This is Rakudo version 2020.02 built on MoarVM version 2020.02 > implementing Raku 6.d. > $ > > How is that explained?
This is because the array inside the hash is inside a container. You can see this is you use `dd` to show the contents of a key: > dd %hash-with-arrays<a> Array %hash-with-arrays = $[1, 2] Note the $ prefix in the output. This inhibits automatic iteration of the array. There is a simple way around it: > %h.values.map: |* (1 2 2 3) This slightly line-noisy solution is short for: > %h.values.map( { $_.Slip } ) (1 2 2 3) Aka, "slip" the values into a single stream of values, hence getting the result you wanted