在列表中§

请参阅例程选取上下文中的主要文档

multi        pick($count*@list --> Seq:D)
multi method pick(List:D: $count --> Seq:D)
multi method pick(List:D: --> Mu)
multi method pick(List:D: Callable $calculate --> Seq:D)

如果提供了 $count:从调用者中随机选择 $count 个元素,且不重复。如果将 * 作为 $count 传递,或 $count 大于或等于列表的大小,则调用者列表中的所有元素都将以随机顺序返回;即以随机顺序返回。

如果省略 $count,则以方法形式返回列表中的单个随机项,如果列表为空,则返回 Nil

示例

say <a b c d e>.pick;           # OUTPUT: «b␤» 
say <a b c d e>.pick: 3;        # OUTPUT: «(c a e)␤» 
say <a b c d e>.pick: *;        # OUTPUT: «(e d a b c)␤»

从 Rakudo 编译器的 2021.06 版本开始,还可以将 **(又名 HyperWhatever)指定为计数。

在这种情况下,.pick 将在耗尽原始列表后再次从原始列表中开始选取,如此反复,无限期地进行下去。

say <a b c>.pick(**).head(10);  # OUTPUT: «((a c b c a b b c a b))␤»

在任何中§

请参阅方法选取上下文中的主要文档

multi method pick(--> Any)
multi method pick($n --> Seq)

通过应用其 .list 方法将调用者强制转换为 List,并对它使用 List.pick

my Range $rg = 'α'..'ω';
say $rg.pick(3); # OUTPUT: «(β α σ)␤»

在角色 Setty 中§

请参阅方法选取上下文中的主要文档

multi method pick($count = 1)

从集合中随机选择 $count 个元素(不重复)。

如果将 * 作为 $count 传递,或 $count 大于或等于集合的大小,则其所有元素都将以随机顺序(随机排列)返回。

在角色 Baggy 中§

请参阅方法选取上下文中的主要文档

multi method pick(Baggy:D: --> Any)
multi method pick(Baggy:D: $count --> Seq:D)

如同普通列表 pick,但返回调用者的键,其权重由其值决定,就好像键被复制了相应值指示的次数,然后使用列表选取。选取的底层隐喻是您正在从袋子中取出彩色弹珠。(有关“带替换选取”,请改用 roll)。如果将 * 作为 $count 传递,或 $count 大于或等于调用者的 total,则调用者的 total 个元素将以随机顺序返回。

请注意,每个 pick 调用都维护其自己的私有状态,并且对后续 pick 调用没有影响。

my $breakfast = bag <eggs bacon bacon bacon>;
say $breakfast.pick;                              # OUTPUT: «eggs␤» 
say $breakfast.pick(2);                           # OUTPUT: «(eggs bacon)␤» 
 
say $breakfast.total;                             # OUTPUT: «4␤» 
say $breakfast.pick(*);                           # OUTPUT: «(bacon bacon bacon eggs)␤»

在范围内§

请参阅方法选取上下文中的主要文档

multi method pick(Range:D:         --> Any:D)
multi method pick(Range:D: $number --> Seq:D)

执行与 Range.list.pick 相同的功能,但尝试通过在不必要时不实际生成列表来进行优化。

在角色 Mixy 中§

请参阅方法选取上下文中的主要文档

method pick($?)

抛出异常。该特性不受类型支持,因为没有明确的值可以从非整数权重中减去,以使其起作用。

在角色枚举中§

请参阅 上下文中的主要文档 以了解方法选择

multi method pick(::?CLASS:U:)
multi method pick(::?CLASS:U: \n)
multi method pick(::?CLASS:D: *@pos)

它作用于已定义的类,选择一个元素并将其消除。

say Norse-gods.pick() for ^3;  # OUTPUT: «Þor␤Freija␤Oðin␤» 

在枚举布尔值中§

请参阅 上下文中的主要文档 以了解例程选择

multi method pick(Bool:U: --> Bool:D)
multi method pick(Bool:U: $count --> Seq:D)

返回True和/或False的随机选择。

如果在没有参数的情况下调用它,则它只返回一个选择

say Bool.pick;                                    # OUTPUT: «True␤»

如果使用一个$count调用它,则它返回一个只有一个选择的Seq

say Bool.pick(1);                                 # OUTPUT: «(False)␤»

如果$count*或大于或等于两个,则它返回一个具有两个元素的Seq——True然后False,或False然后True

say Bool.pick(*);                                 # OUTPUT: «(False True)␤»