、Christoph's answerは(彼はよくPerl 6のを知っている)が正しいです。しかし、私はpick
とroll
が最初は簡単に混乱することができるので、私は少し精緻化すると思った。
一つだけランダムキーをしたい場合は、pick
とroll
が同じと交換可能に使用することができるようです。
my $rand-keyA = %a.keys.pick;
my $rand-keyB = %a.keys.roll;
しかし、私はNを持っている」と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
01無限リストを作成します。
私は最終的に一緒に '%のa.keys [INT(%のa.elems.rand)]を石畳' しかし、みかん簡素を期待していたが、私は推測します。 –