BrowserREPL-button-tip-on BrowserREPL-button-tip-off

EditButtonTip 2024-05-18

role Setty

Collection of distinct objects

role Setty does QuantHash { }
Code

A role for collections which make sure that each element can only appear once. See Set and SetHash.

Methods§

method new-from-pairs§

method new-from-pairs(*@pairs --> Setty:D)
Code

Constructs a Setty object from a list of Pair objects given as positional arguments:

say Set.new-from-pairs: 'butter' => 0.22, 'salt' => 0, 'sugar' => 0.02;
# OUTPUT: «Set(butter sugar)␤»
Code

Note: be sure you aren't accidentally passing the Pairs as positional arguments; the quotes around the keys in the above example are significant.

method grab§

method grab($count = 1)
Code

Removes and 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 removed and returned in random order.

Only works on mutable sets; When used on an immutable set, it results in an exception.

method grabpairs§

method grabpairs($count = 1)
Code

Removes $count elements chosen at random (without repetition) from the set, and returns a list of Pair objects whose keys are the grabbed elements and whose values are True.

If * is passed as $count, or $count is greater than or equal to the size of the set, then all its elements are removed and returned as Pairs in the aforementioned way in random order.

Only works on mutable sets; When used on an immutable set, it results in an exception.

method pick§

multi method pick($count = 1)
Code

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).

method pickpairs§

multi method pickpairs(Setty:D: --> Pair:D)
multi method pickpairs(Setty:D: $count --> Seq:D)
Code

Returns a Pair or a Seq of Pairs depending on the candidate of the method being invoked. Each Pair returned has an element of the invocant as its key and True as its value. In contrast to grabpairs, the elements are 'picked' without replacement.

If * is passed as $count, or $count is greater than or equal to the number of elements of the invocant, then all element/True Pairs from the invocant are returned in a random sequence; i.e. they are returned shuffled;

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

my $numbers = set (4, 2, 3);
say $numbers.pickpairs;                           # OUTPUT: «4 => True␤»
say $numbers.pickpairs(1);                        # OUTPUT: «(3 => True)␤»
say $numbers.pickpairs(*);                        # OUTPUT: «(2 => True 4 => True 3 => True)␤»
Code

method roll§

multi method roll($count = 1)
Code

Returns a lazy list of $count elements, each randomly selected from the set. Each random choice is made independently, like a separate die roll where each die face is a set element.

If * is passed as $count, the list is infinite.

method antipairs§

multi method antipairs(Setty:D: --> Seq:D)
Code

Returns all elements in the set and True as a Seq of Pairs, where the element itself is the value, i.e. the opposite of method pairs.

my $s = Set.new(1, 2, 3, 1);
say $s.antipairs.sort;                            # OUTPUT: «(True => 1 True => 2 True => 3)␤»
Code

method keys§

multi method keys(Setty:D: --> Seq:D)
Code

Returns a Seq of all elements of the set.

my $s = Set.new(1, 2, 3);
say $s.keys;                                      # OUTPUT: «(3 1 2)␤»
Code

method values§

multi method values(Setty:D: --> Seq:D)
Code

Returns a Seq containing as many True values as the set has elements.

my $s = Set.new(1, 2, 3);
say $s.values;                                    # OUTPUT: «(True True True)␤»
Code

method kv§

multi method kv(Setty:D: --> Seq:D)
Code

Returns a Seq of the set's elements and True values interleaved.

my $s = Set.new(1, 2, 3);
say $s.kv;                                        # OUTPUT: «(3 True 1 True 2 True)␤»
Code

method elems§

method elems(Setty:D: --> Int)
Code

The number of elements of the set.

method total§

method total(Setty:D: --> Int)
Code

The total of all the values of the QuantHash object. For a Setty object, this is just the number of elements.

method minpairs§

multi method minpairs(Setty:D: --> Seq:D)
Code

Returns the value of self.pairs (as all Pairs have minimum values). See also Any.minpairs

method maxpairs§

multi method maxpairs(Setty:D: --> Seq:D)
Code

Returns the value of self.pairs (as all Pairs have maximum values). See also Any.maxpairs

method default§

method default(--> False)
Code

Returns the default value of the invocant, i.e. the value which is returned when trying to access an element in the Setty object which has not been previously initialized or when accessing an element which has explicitly been set to Nil or False.

my $s1 = SetHash.new(1, 2, 3);
say $s1{2};                                           # OUTPUT: «True␤»
$s1{2} = Nil;
say $s1{2};                                           # OUTPUT: «False␤»
# access non initialized element
say $s1{4};                                           # OUTPUT: «False␤»
Code

method ACCEPTS§

method ACCEPTS($other)
Code

Returns True if $other and self contain all the same elements, and no others.

method Bag§

method Bag(Setty:D: --> Bag:D)
Code

Returns a Bag containing the elements of the invocant.

my Bag $b = Set.new(1, 2, 3).Bag;
say $b;                                           # OUTPUT: «Bag(3 1 2)␤»
Code

The quantity of the elements in this created bag will be set to one:

say (1,2,3).Bag{1};                              # OUTPUT: «1␤»
Code

method BagHash§

method BagHash(Setty:D: --> BagHash:D)
Code

Returns a BagHash containing the elements of the invocant.

my BagHash $b = Set.new(1, 2, 3).BagHash;
say $b;                                           # OUTPUT: «BagHash(1 2 3)␤»
Code

method Bool§

multi method Bool(Setty:D: --> Bool:D)
Code

Returns True if the invocant contains at least one element.

my $s1 = Set.new(1, 2, 3);
say $s1.Bool;                                     # OUTPUT: «True␤»

my $s2 = $s1 ∩ Set.new(4, 5);                     # set intersection operator
say $s2.Bool;                                     # OUTPUT: «False␤»
Code

method Mix§

method Mix(Setty:D: --> Mix:D)
Code

Returns a Mix containing the elements of the invocant.

my Mix $b = Set.new(1, 2, 3).Mix;
say $b;                                           # OUTPUT: «Mix(3 1 2)␤»
Code

The elements of the returned Mix will have weights equal to 1:

say (1,2,3).Mix{3};                               # OUTPUT: «1␤»
Code

method MixHash§

method MixHash(Setty:D: --> MixHash:D)
Code

Returns a MixHash containing the elements of the invocant.

my MixHash $b = Set.new(1, 2, 3).MixHash;
say $b;                                           # OUTPUT: «MixHash(1 2 3)␤»
Code

See Also§

Sets, Bags, and Mixes

Class relation diagram§

Rakudo Type Relation for Setty Setty Setty QuantHash QuantHash Setty->QuantHash does