08:00
dakkar joined
|
|||
Anton Antonov | What does this declaration within a class mean: `has $.var0 of Str;` ? Is it the same as `has Str $.var0;` ? | 13:34 | |
lizmat | yeah, at least the BUILDPLAN for that class looks identical :-) | 13:37 | |
Anton Antonov | @lizmat Thank you! | ||
What is the most concise way to "transpose" a hash of hashes? I.e. from (h1) `{female => {died => 127, survived => 339}, male => {died => 682, survived => 161}}` to obtain (h2) `{died => {female => 127, male => 682}, survived => {female => 339, male => 161}}`? I can, of course, use for-loop / map, etc., but I strongly suspect there are better solutions... | 13:48 | ||
lizmat | my %h2 = %h1.map: { .key => .value<died> } | 13:52 | |
ah, no | 13:53 | ||
lizmat draws a blank on not using a .map :-) | 13:56 | ||
gfldex | m:``` | 14:39 | |
my %h1 = female => {died => 127, survived => 339}, male => {died => 682, survived => 161}; | |||
say %h1{*;'died'}:kv; | |||
``` | |||
That one needs v6.* to work. Also, this is just the first step. | 14:40 | ||
gfldex | lizmat: this is a usecase for gist.github.com/gfldex/381b402a535...194a25dd96 | 14:41 | |
the {**}:deepkv case | |||
gfldex | m:``` | 14:43 | |
use v6.*; | |||
my %h1 = female => {died => 127, survived => 339}, male => {died => 682, survived => 161}; | |||
say %h1{*;'died'}:kv; | |||
``` | |||
actually, we got fixed dimensions, so we should not need the hyperwhatever | 14:47 | ||
Nahita | what is the meaning of a variable without a twigil declared with `has`? e.g. `class A { has $val }`. | 14:49 | |
I saw it in this answer: stackoverflow.com/questions/629688...2#62969222 | 14:50 | ||
I saw it in this answer: stackoverflow.com/a/62969222 | 14:51 | ||
Anton Antonov | <@!195453211409121280> With raku(do) version 2021.06 I get `%res{*;'died'} --> (682 127)`, i.e. I cannot use `kv`. | 14:52 | |
gfldex | <@!694526400488669234> you need to add `use v6.*` to get the .e_PREVIEW, but the june release might also be to old | 14:56 | |
m:``` | 14:57 | ||
my %h1 = female => {died => 127, survived => 339}, male => {died => 682, survived => 161}; | |||
say (%h1{*;*}:kv).flat.rotor(3)».[1,0,2]».map({ $^a => $^b => $^c}); | |||
``` | |||
m:``` | |||
use v6.*; | |||
my %h1 = female => {died => 127, survived => 339}, male => {died => 682, survived => 161}; | |||
say (%h1{*;*}:kv).flat.rotor(3)».[1,0,2]».map({ $^a => $^b => $^c}); | |||
``` | |||
Anton Antonov | <@!195453211409121280> Ok, thanks -- I was looking into what "rakudo star" means... | ||
gfldex | that's how far I got. I don't think we got an easy way to assign that directly to a Hash. At least it gives me an idea what `%h{**} = (survived => male => 161) (died => male => 682) (died => female => 127) (survived => female => 339)` would mean. | 14:58 | |
m:``` | 15:08 | ||
use v6.*; | |||
my %h1 = female => {died => 127, survived => 339}, male => {died => 682, survived => 161}; | |||
my %h2; | |||
for (%h1{*;*}:kv).flat.rotor(3)».[1,0,2] -> [ $k1, $k2, $v ] { | |||
%h2{||[$k1, $k2]} = $v; | |||
} | |||
say %h2; | |||
``` | |||
there you go :) | |||
I didn't know that `||<key1 key2>` worked. | 15:09 | ||
<@!694526400488669234> The following blogpost might help to understand what is going on. This is a case where we need to change to order of keys in a deepkey. gfldex.wordpress.com/2021/07/11/co...-addition/ | 15:10 | ||
15:22
discord-raku-bot left,
discord-raku-bot joined
15:23
discord-raku-bot left,
discord-raku-bot joined
16:48
dakkar left
|
|||
Nahita | here is another for-loop based solution: | 17:01 | |
m:``` | |||
my %h1 := {female => {died => 127, survived => 339}, male => {died => 682, survived => 161}}; | |||
my %h-new; | |||
for %h1.values.first.keys X %h1.keys -> ($new-key, $current-key) { | |||
%h-new{$new-key}{$current-key} = %h1{$current-key}{$new-key}; | |||
} | |||
say %h-new; | |||
``` | |||
`%h1.values.first.keys` gets the keys of each inner hash (`died, survived`) and then it is cross producted with the current keys (`female, male`) to help form the transposed hash. | 17:03 | ||
22:52
Polyinsecure joined
23:15
Polyinsecure left
|