Just thought I'd plug a few Perl6 ways of doing it, for future reference.
my %hash = ( word => 1, second => 3, third => 7 ); ###### my @weighted = (); for %hash.keys -> $key { push @weighted, ( $key ) xx %hash{ $key }; } say @weighted.pick; ###### Basically the same thing: my @weighted = (); push @weighted, ( $_ ) xx %hash{ $_ } for %hash.keys; say @weighted.pick; ###### One-liner style. *Somewhat* based on Roger's above. %hash .keys .map:{ ( $_ ) xx %hash{ $_ } } .pick .say; ## (or actually on one line) %hash.keys.map:{ ( $_ ) xx %hash{ $_ } }.pick.say;
(And if one of those Perl6 experts comes along, tell him or her that I'm still kinda new to p6, so there might even be better ways to do it! ;)
-Bryan
In reply to Re: "Scalar found where operator expected", references (perl6)
by mrborisguy
in thread "Scalar found where operator expected", references
by jjohhn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |