Random 如何在Perl 6中获得随机选择的哈希键?

Random 如何在Perl 6中获得随机选择的哈希键?,random,hash,key,raku,rakudo,Random,Hash,Key,Raku,Rakudo,一个快速且希望简单的问题: 我需要从给定的一组散列键中随机选择的方法。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非常熟悉。然而,我想我应该详细说明一下,因为一开始很容易被弄糊涂 如果只需要一个随机项,则和看

一个快速且希望简单的问题:

我需要从给定的一组散列键中随机选择的方法。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非常熟悉。然而,我想我应该详细说明一下,因为一开始很容易被弄糊涂

如果只需要一个随机项,则和看起来相同,可以互换使用,因为它们都默认从原始列表或数组返回一个项:

my$rand keyA=%a.keys.pick; 我的$rand keyB=%a.keys.roll; 但是,请这样想: 因为这个容器里只有N件东西,所以我一次只能取N件东西。 这意味着我有一个N面骰子,可以任意掷多少次

my%a=1,2,3,4,5,6;{ 1 => 2, 3 => 4, 5 => 6 } i、 e.键为1、3和5 说%a.keys.pick2;5 3 说%a.keys.pick2;3 1 说%a.keys.pick5;3 5 1没有了,因为只有三个可以挑选 说%a.keys.pick10;3 1 5 说%a.keys.roll5;1 5 1 5 3根据您的要求进行卷数 说%a.keys.roll10;5 5 1 1 5 5 3 1 3 1 是从数组中创建随机重新排序列表的一种简单方法,无需知道它有多少个元素:

my@array=; @数组。拾取*;巴富巴富 是一种创建无限列表的简单方法,其元素从原始数组中随机选择:

我的@rolls=@array.roll*; 说@rolls[0];福巴 说@rolls[10];酒吧 说@rolls[351];巴兹 say@rolls[19123];福巴 说@rolls[1000000];酒吧 说@rolls[1000001];酒吧 说@rolls[1000002];福
我最终拼凑出了%a.keys[Int%a.elems.rand],但我想是希望更简单一些。有一点让我被pick绊倒了:如果你想从一个列表中挑选多个元素,不重复,用你想要的号码打一次pick。每次调用它时,它都会以完整的列表重新开始,并且可以再次重复元素。换句话说,要从一副牌中抽出5张牌,请执行以下操作:my@hand=@deck.pick5;不是:my$card1=@deck.pick;my$card2=@deck.pick;等等,或者也:%a.pick.key好东西;我感谢你的精心安排
%a.keys.pick