pick
ErrorsCollection

pick

Synthesised documentation from type/Baggy type/Range type/Enumeration type/Any type/Setty type/Bool type/Mixy type/List

From type/Baggy

See Original text in context

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

Like an ordinary list pick, but returns keys of the invocant weighted by their values, as if the keys were replicated the number of times indicated by the corresponding value and then list pick used. The underlying metaphor for picking is that you're pulling colored marbles out a bag. (For "picking with replacement" see roll instead). If * is passed as $count, or $count is greater than or equal to the total of the invocant, then total elements from the invocant are returned in a random sequence.

Note that each pick invocation maintains its own private state and has no effect on subsequent pick invocations.

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)␤»

From type/Range

See Original text in context

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

Performs the same function as Range.list.pick, but attempts to optimize by not actually generating the list if it is not necessary.

From type/Enumeration

See Original text in context

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

It works on the defined class, selecting one element and eliminating it.

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

From type/Any

See Original text in context

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

Coerces the invocant to a list by applying its .list method and uses List.pick on it.

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

From type/Setty

See Original text in context

multi method pick($count = 1)

Returns $count elements chosen at random (without repetition) from the set.

If * is passed as $count, or $count is greater than or equal to the size of the set, then all its elements are returned in random order (shuffled).

From type/Bool

See Original text in context

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

Returns True or False if called without any argument. Otherwise returns $count elements chosen at random (without repetition) from the enum. If * is passed as $count, or $count is greater than or equal to two, then both elements are returned in random order.

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

From type/Mixy

See Original text in context

method pick($?)

Throws an exception. The feature is not supported on the type, since there's no clear value to subtract from non-integral weights, to make it work.

From type/List

See Original text in context

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

If $count is supplied: Returns $count elements chosen at random and without repetition from the invocant. If * is passed as $count, or $count is greater than or equal to the size of the list, then all elements from the invocant list are returned in a random sequence; i.e. they are returned shuffled.

In method form, if $count is omitted: Returns a single random item from the list, or Nil if the list is empty

Examples:

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)␤»