role Setty does QuantHash { }
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)
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)»
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)
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)
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 Pair
s 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)
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)
Returns a Pair
or a Seq
of Pair
s 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
Pair
s 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)»
method roll§
multi method roll($count = 1)
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)
Returns all elements in the set and True
as a Seq
of Pair
s, 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)»
method keys§
multi method keys(Setty:D: --> Seq:D)
Returns a Seq
of all elements of the set.
my $s = Set.new(1, 2, 3); say $s.keys; # OUTPUT: «(3 1 2)»
method values§
multi method values(Setty:D: --> Seq:D)
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)»
method kv§
multi method kv(Setty:D: --> Seq:D)
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)»
method elems§
method elems(Setty:D: --> Int)
The number of elements of the set.
method total§
method total(Setty:D: --> Int)
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)
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)
Returns the value of self.pairs
(as all Pairs have maximum values). See also Any.maxpairs
method default§
method default(--> False)
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»
method ACCEPTS§
method ACCEPTS($other)
Returns True
if $other
and self
contain all the same elements, and no others.
method Bag§
method Bag(Setty:D: --> Bag:D)
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)»
The quantity of the elements in this created bag will be set to one:
say (1,2,3).Bag{1}; # OUTPUT: «1»
method BagHash§
method BagHash(Setty:D: --> BagHash:D)
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)»
method Bool§
multi method Bool(Setty:D: --> Bool:D)
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»
method Mix§
method Mix(Setty:D: --> Mix:D)
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)»
The elements of the returned Mix
will have weights equal to 1:
say (1,2,3).Mix{3}; # OUTPUT: «1»
method MixHash§
method MixHash(Setty:D: --> MixHash:D)
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)»