一个快速且有希望的简单问题:如何在Perl 6中获得随机选择的哈希键?
我需要从随机选择一组给定散列键的方法。在rand和Hash上的perl6.org文档都提供了许多提示。
my %a = 1,2,3,4,5,6;
鉴于上述情况,
%a.keys;
回报(5 1 3)
,如果我只是尝试
%a.rand;
我得到一个伪随机浮动,而不是任何一个键。
我最终拼凑在一起%a.keys[Int(%a.elems.rand)]
,但希望有更简单的事情。
一个快速且有希望的简单问题:如何在Perl 6中获得随机选择的哈希键?
我需要从随机选择一组给定散列键的方法。在rand和Hash上的perl6.org文档都提供了许多提示。
my %a = 1,2,3,4,5,6;
鉴于上述情况,
%a.keys;
回报(5 1 3)
,如果我只是尝试
%a.rand;
我得到一个伪随机浮动,而不是任何一个键。
我最终拼凑在一起%a.keys[Int(%a.elems.rand)]
,但希望有更简单的事情。
像往常一样,Christoph's answer是正确的(他知道Perl 6的好)。不过,我想我会详细说明一下,因为pick
和roll
起初很容易混淆。
如果你只想要一个随机密钥,然后pick
和roll
似乎相同的,可以互换使用:
my $rand-keyA = %a.keys.pick;
my $rand-keyB = %a.keys.roll;
不过,联想的pick
为“我有ñ东西,我正在从容器中挑选它们,一旦它们消失,它们就消失了(对于这个选择)“与roll
相比“我有一个N骰子,我正在滚动”。
say %a.keys.pick(2); # (5 3)
say %a.keys.pick(2); # (3 1)
say %a.keys.pick(5); # (3 5 1) no more, because there were only three to pick from
say %a.keys.pick(10); # (3 1 5)
say %a.keys.roll(5); # (1 5 1 5 3) as many "rolls" as you request
say %a.keys.roll(10); # (5 5 1 1 5 5 3 1 3 1)
pick(*)
是创建一个数组随机顺序列表,而不必知道它有多少元素有一个简单的方法:
my @array = <foo bar baz foobar>;
@array.pick(*); # (bar foobar baz foo)
roll(*)
是一个简单的方法来创建一个无限列表,其元素已从原始数组中随机选择:
my @rolls = @array.roll(*);
say @rolls[0]; # foobar
say @rolls[10]; # bar
say @rolls[351]; # baz
say @rolls[19123]; # foobar
say @rolls[1000000]; # bar
say @rolls[1000001]; # bar
say @rolls[1000002]; # foo
好东西;我赞赏这种阐述 –
我最终鹅卵石 '%a.keys [INT(%a.elems.rand)一起' 但八九不离十希望简单,我猜。 –