role Setty does QuantHash { }

针对确保每个元素只能出现一次的集合的角色。请参阅 SetSetHash

方法§

方法 new-from-pairs§

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

根据作为位置参数提供的 Pair 对象 列表构造一个 Setty 对象

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

注意:确保没有意外地将 Pairs 作为位置参数传递;上述示例中键周围的引号很重要。

方法 grab§

method grab($count = 1)

从集合中移除并返回从集合中随机选择的(不重复)$count 个元素。

如果将 * 作为 $count 传递,或者 $count 大于或等于集合的大小,则移除集合中的所有元素,并按随机顺序返回这些元素。

仅适用于可变集合;在不可变集合上使用时,会导致异常。

方法 grabpairs§

method grabpairs($count = 1)

从集合中移除从集合中随机选择的(不重复)$count 个元素,并返回一个 Pair 对象列表,其键为抓取的元素,其值为 True

如果将 * 作为 $count 传递,或者 $count 大于或等于集合的大小,则按上述方式移除集合中的所有元素,并按随机顺序返回这些元素作为 Pair

仅适用于可变集合;在不可变集合上使用时,会导致异常。

方法 pick§

multi method pick($count = 1)

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

如果将 * 作为 $count 传递,或者 $count 大于或等于集合的大小,则按随机顺序(打乱顺序)返回集合中的所有元素。

方法 pickpairs§

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

返回一个 Pair 或一个 SeqPair,具体取决于调用方法的候选对象。返回的每个 Pair 都具有调用方的元素作为其键,并具有 True 作为其值。与 grabpairs 相比,元素是“选择”的,并且不会替换。

如果将 * 作为 $count 传递,或 $count 大于或等于调用者 元素 的数量,则以随机顺序返回调用者中的所有元素/True Pair;即它们以随机顺序返回;

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

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

方法 roll§

multi method roll($count = 1)

返回一个包含 $count 个元素的惰性列表,每个元素都是从集合中随机选择的。每个随机选择都是独立进行的,就像一个单独的掷骰子,其中每个骰子面都是一个集合元素。

如果将 * 作为 $count 传递,则列表是无限的。

方法 antipairs§

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

返回集合中的所有元素和 True 作为 SeqPair,其中元素本身是值,即方法 pairs 的相反。

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

方法 keys§

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

返回集合中所有元素的 Seq

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

方法 values§

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

返回一个 Seq,其中包含与集合元素一样多的 True 值。

my $s = Set.new(123);
say $s.values;                                    # OUTPUT: «(True True True)␤»

方法 kv§

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

返回集合元素和 True 值交错的 Seq

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

方法 elems§

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

集合的元素数量。

方法 total§

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

QuantHash 对象的所有值的总和。对于 Setty 对象,这只是元素的数量。

方法 minpairs§

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

返回 self.pairs 的值(因为所有对都具有最小值)。另请参见 Any.minpairs

方法 maxpairs§

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

返回 self.pairs 的值(因为所有对都具有最大值)。另请参见 Any.maxpairs

方法 default§

method default(--> False)

返回调用者的默认值,即在尝试访问 Setty 对象中先前未初始化的元素或访问已明确设置为 NilFalse 的元素时返回的值。

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

方法 ACCEPTS§

method ACCEPTS($other)

如果 $otherself 包含所有相同的元素且没有其他元素,则返回 True

方法 Bag§

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

返回一个包含调用者元素的 Bag

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

此创建的 bag 中元素的数量将设置为 1

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

方法 BagHash§

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

返回一个包含调用者元素的 BagHash

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

方法 Bool§

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

如果调用者至少包含一个元素,则返回 True

my $s1 = Set.new(123);
say $s1.Bool;                                     # OUTPUT: «True␤» 
 
my $s2 = $s1  Set.new(45);                     # set intersection operator 
say $s2.Bool;                                     # OUTPUT: «False␤»

方法 Mix§

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

返回一个包含调用者元素的 Mix

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

返回的 Mix 的元素的权重将等于 1

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

方法 MixHash§

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

返回一个包含调用者元素的 MixHash

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

另请参见§

集合、包和混合

类型图§

Setty 的类型关系
raku-type-graph Setty Setty QuantHash QuantHash Setty->QuantHash Associative Associative QuantHash->Associative Mu Mu Any Any Any->Mu Set Set Set->Setty Set->Any SetHash SetHash SetHash->Setty SetHash->Any

展开上面的图表