在列表中§
请参阅例程选取的上下文中的主要文档
multi pick(, * --> Seq)multi method pick(List: --> Seq)multi method pick(List: --> Mu)multi method pick(List: Callable --> Seq)
如果提供了 $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( --> Seq)
通过应用其 .list
方法将调用者强制转换为 List
,并对它使用 List.pick
。
my Range = 'α'..'ω';say .pick(3); # OUTPUT: «(β α σ)»
在角色 Setty 中§
请参阅方法选取的上下文中的主要文档
multi method pick( = 1)
从集合中随机选择 $count
个元素(不重复)。
如果将 *
作为 $count
传递,或 $count
大于或等于集合的大小,则其所有元素都将以随机顺序(随机排列)返回。
在角色 Baggy 中§
请参阅方法选取的上下文中的主要文档
multi method pick(Baggy: --> Any)multi method pick(Baggy: --> Seq)
如同普通列表 pick,但返回调用者的键,其权重由其值决定,就好像键被复制了相应值指示的次数,然后使用列表选取。选取的底层隐喻是您正在从袋子中取出彩色弹珠。(有关“带替换选取”,请改用 roll)。如果将 *
作为 $count
传递,或 $count
大于或等于调用者的 total,则调用者的 total
个元素将以随机顺序返回。
请注意,每个 pick
调用都维护其自己的私有状态,并且对后续 pick
调用没有影响。
my = bag <eggs bacon bacon bacon>;say .pick; # OUTPUT: «eggs»say .pick(2); # OUTPUT: «(eggs bacon)»say .total; # OUTPUT: «4»say .pick(*); # OUTPUT: «(bacon bacon bacon eggs)»
在范围内§
请参阅方法选取的上下文中的主要文档
multi method pick(Range: --> Any)multi method pick(Range: --> Seq)
执行与 Range.list.pick
相同的功能,但尝试通过在不必要时不实际生成列表来进行优化。
在角色 Mixy 中§
请参阅方法选取的上下文中的主要文档
method pick($?)
抛出异常。该特性不受类型支持,因为没有明确的值可以从非整数权重中减去,以使其起作用。
在角色枚举中§
请参阅 上下文中的主要文档 以了解方法选择
multi method pick(::?CLASS:)multi method pick(::?CLASS: \n)multi method pick(::?CLASS: *)
它作用于已定义的类,选择一个元素并将其消除。
say Norse-gods.pick() for ^3; # OUTPUT: «ÞorFreijaOðin»
在枚举布尔值中§
请参阅 上下文中的主要文档 以了解例程选择
multi method pick(Bool: --> Bool)multi method pick(Bool: --> Seq)
返回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)»