Yes, it does help. So, to create a new pair *k*ey/*v*alue on the fly in a hash given another pair k/v, or even modify it will be a problem, then maybe will better use an array instead of a hash.
> my @a = [ 1..5, 'a'..'e' ] [1..5 "a".."e"] > @a[2] = [@a[0][] ==> map( { .sqrt} )] > @a[2] [1 1.4142135623730951 1.7320508075688772 2 2.23606797749979] On Wed, Jul 14, 2021 at 3:55 PM Clifton Wood <clifton.w...@gmail.com> wrote: > Unfortunately, given this: > > my %a = 'column1' => [1...5], 'column2' => ['a'...'e'] >> > > column1 and column2 cannot yet be referenced to create column3. > > You need to do that on another line: > > %a<column3> = %a<column1>.map: { .sqrt }; > > Which gives the following: > > > %a.gist.say > # {column1 => [1 2 3 4 5], column2 => [a b c d e], column3 => (1 > 1.4142135623730951 1.7320508075688772 2 2.23606797749979)} > > Does this help? > > - X > > On Wed, Jul 14, 2021 at 2:32 PM Aureliano Guedes < > guedes.aureli...@gmail.com> wrote: > >> Thanks JJ, Marcel, Matthew >> >> That's help me a lot to understand how Raku hashes work; >> Little bit complex compared to Perl5. >> >> But now I got another question >> >> given >> my %a = 'column1' => [1...5], 'column2' => ['a'...'e'] >> >> I want to calculate sqrt and store in column3 >> > %a{'column1'}.map({ .sqrt }) >> (1 1.4142135623730951 1.7320508075688772 2 2.23606797749979) >> > %a{'column3'} = %a{'column1'}.map({ .sqrt }) >> > %a{'column3'} >> (1 1.4142135623730951 1.7320508075688772 2 2.23606797749979) >> > %a.keys >> (column1 column3 column2) >> >> But... >> > %a{'column1'} ==> map( { .sqrt } ) >> (2.23606797749979) >> >> How I access the array's values within the hash? >> >> >> On Wed, Jul 14, 2021 at 2:55 PM Marcel Timmerman <mt1...@gmail.com> >> wrote: >> >>> On 7/14/21 7:43 PM, Aureliano Guedes wrote: >>> >>> Hi all, >>> >>> Trying to knowing a little bit more about Raku lang, I decided to write >>> a simple (as possible) lib to became similar to R/dplyr or Python/Pandas >>> method to data wrangle. >>> >>> So, Raku gives us the possibility to deal with data in a functional way, >>> given the native pipe operator, which is wonderful for newbies. >>> > @a = 1..100 >>> > @a ==> map( { .sqrt } ) >>> > @a ==> HYPER( { .sqrt } ) # faster map >>> Even it is being *too verbose*, is good enough for the first moment to >>> a data scientist. >>> >>> So I'm trying to decide the best way to abstract columns. >>> First, I decide to use a hash where the key is the column name and the >>> value is the oriented list ou array. >>> >>> > my %a = {'column1' => [1...5], 'column2' => ['a'...'e']} >>> Potential difficulties: >>> Useless use of hash composer on right side of hash assignment; did >>> you mean := instead? >>> at line 2 >>> ------> <BOL>⏏<EOL> >>> {column1 => [1 2 3 4 5], column2 => [a b c d e]} >>> >>> It is a warning, not an error! >>> >>> But let's obey the warning. >>> > my %a = {'column1' := [1...5], 'column2' := ['a'...'e']} >>> ===SORRY!=== Error while compiling: >>> Cannot use bind operator with this left-hand side >>> ------> n1' := [1...5], 'column2' := ['a'...'e']⏏} >>> >>> >>> ':=' in the error is meant to replace the assignment so you are binding >>> directly to the hash. >>> So write, >>> >>> my %a := {'column1' => [1...5], 'column2' => ['a'...'e']} >>> >>> Without the binding you could write instead >>> >>> my %a = 'column1' => [1...5], 'column2' => ['a'...'e'] >>> >>> See also https://docs.raku.org/type/Hash and >>> https://docs.raku.org/routine/:= >>> >>> >>> Now we got an error. >>> >>> Someone may explain me why I got this error?? >>> >>> Thanks in advance >>> >>> >>> >>> >>> -- >>> Aureliano Guedes >>> skype: aureliano.guedes >>> contato: (11) 94292-6110 >>> whatsapp +5511942926110 >>> >>> >>> >> >> -- >> Aureliano Guedes >> skype: aureliano.guedes >> contato: (11) 94292-6110 >> whatsapp +5511942926110 >> > -- Aureliano Guedes skype: aureliano.guedes contato: (11) 94292-6110 whatsapp +5511942926110