does QuantHash
针对确保每个元素只能出现一次的集合的角色。请参阅 Set
和 SetHash
。
方法§
方法 new-from-pairs§
method new-from-pairs(* --> Setty)
根据作为位置参数提供的 Pair
对象 列表构造一个 Setty 对象
say Set.new-from-pairs: 'butter' => 0.22, 'salt' => 0, 'sugar' => 0.02;# OUTPUT: «Set(butter sugar)»
注意:确保没有意外地将 Pairs 作为位置参数传递;上述示例中键周围的引号很重要。
方法 grab§
method grab( = 1)
从集合中移除并返回从集合中随机选择的(不重复)$count
个元素。
如果将 *
作为 $count
传递,或者 $count
大于或等于集合的大小,则移除集合中的所有元素,并按随机顺序返回这些元素。
仅适用于可变集合;在不可变集合上使用时,会导致异常。
方法 grabpairs§
method grabpairs( = 1)
从集合中移除从集合中随机选择的(不重复)$count
个元素,并返回一个 Pair
对象列表,其键为抓取的元素,其值为 True
。
如果将 *
作为 $count
传递,或者 $count
大于或等于集合的大小,则按上述方式移除集合中的所有元素,并按随机顺序返回这些元素作为 Pair
。
仅适用于可变集合;在不可变集合上使用时,会导致异常。
方法 pick§
multi method pick( = 1)
从集合中返回从集合中随机选择的(不重复)$count
个元素。
如果将 *
作为 $count
传递,或者 $count
大于或等于集合的大小,则按随机顺序(打乱顺序)返回集合中的所有元素。
方法 pickpairs§
multi method pickpairs(Setty: --> Pair)multi method pickpairs(Setty: --> Seq)
返回一个 Pair
或一个 Seq
的 Pair
,具体取决于调用方法的候选对象。返回的每个 Pair
都具有调用方的元素作为其键,并具有 True
作为其值。与 grabpairs 相比,元素是“选择”的,并且不会替换。
如果将 *
作为 $count
传递,或 $count
大于或等于调用者 元素 的数量,则以随机顺序返回调用者中的所有元素/True
Pair
;即它们以随机顺序返回;
请注意,每个 pickpairs
调用都维护其自己的私有状态,并且对后续 pickpairs
调用没有影响。
my = set (4, 2, 3);say .pickpairs; # OUTPUT: «4 => True»say .pickpairs(1); # OUTPUT: «(3 => True)»say .pickpairs(*); # OUTPUT: «(2 => True 4 => True 3 => True)»
方法 roll§
multi method roll( = 1)
返回一个包含 $count
个元素的惰性列表,每个元素都是从集合中随机选择的。每个随机选择都是独立进行的,就像一个单独的掷骰子,其中每个骰子面都是一个集合元素。
如果将 *
作为 $count
传递,则列表是无限的。
方法 antipairs§
multi method antipairs(Setty: --> Seq)
返回集合中的所有元素和 True
作为 Seq
的 Pair
,其中元素本身是值,即方法 pairs
的相反。
my = Set.new(1, 2, 3, 1);say .antipairs.sort; # OUTPUT: «(True => 1 True => 2 True => 3)»
方法 keys§
multi method keys(Setty: --> Seq)
返回集合中所有元素的 Seq
。
my = Set.new(1, 2, 3);say .keys; # OUTPUT: «(3 1 2)»
方法 values§
multi method values(Setty: --> Seq)
返回一个 Seq
,其中包含与集合元素一样多的 True
值。
my = Set.new(1, 2, 3);say .values; # OUTPUT: «(True True True)»
方法 kv§
multi method kv(Setty: --> Seq)
返回集合元素和 True
值交错的 Seq
。
my = Set.new(1, 2, 3);say .kv; # OUTPUT: «(3 True 1 True 2 True)»
方法 elems§
method elems(Setty: --> Int)
集合的元素数量。
方法 total§
method total(Setty: --> Int)
QuantHash
对象的所有值的总和。对于 Setty
对象,这只是元素的数量。
方法 minpairs§
multi method minpairs(Setty: --> Seq)
返回 self.pairs
的值(因为所有对都具有最小值)。另请参见 Any.minpairs
方法 maxpairs§
multi method maxpairs(Setty: --> Seq)
返回 self.pairs
的值(因为所有对都具有最大值)。另请参见 Any.maxpairs
方法 default§
method default(--> False)
返回调用者的默认值,即在尝试访问 Setty
对象中先前未初始化的元素或访问已明确设置为 Nil
或 False
的元素时返回的值。
my = SetHash.new(1, 2, 3);say ; # OUTPUT: «True»= Nil;say ; # OUTPUT: «False»# access non initialized elementsay ; # OUTPUT: «False»
方法 ACCEPTS§
method ACCEPTS()
如果 $other
和 self
包含所有相同的元素且没有其他元素,则返回 True
。
方法 Bag§
method Bag(Setty: --> Bag)
返回一个包含调用者元素的 Bag
。
my Bag = Set.new(1, 2, 3).Bag;say ; # OUTPUT: «Bag(3 1 2)»
此创建的 bag 中元素的数量将设置为 1
say (1,2,3).Bag; # OUTPUT: «1»
方法 BagHash§
method BagHash(Setty: --> BagHash)
返回一个包含调用者元素的 BagHash
。
my BagHash = Set.new(1, 2, 3).BagHash;say ; # OUTPUT: «BagHash(1 2 3)»
方法 Bool§
multi method Bool(Setty: --> Bool)
如果调用者至少包含一个元素,则返回 True
。
my = Set.new(1, 2, 3);say .Bool; # OUTPUT: «True»my = ∩ Set.new(4, 5); # set intersection operatorsay .Bool; # OUTPUT: «False»
方法 Mix§
method Mix(Setty: --> Mix)
返回一个包含调用者元素的 Mix
。
my Mix = Set.new(1, 2, 3).Mix;say ; # OUTPUT: «Mix(3 1 2)»
返回的 Mix
的元素的权重将等于 1
say (1,2,3).Mix; # OUTPUT: «1»
方法 MixHash§
method MixHash(Setty: --> MixHash)
返回一个包含调用者元素的 MixHash
。
my MixHash = Set.new(1, 2, 3).MixHash;say ; # OUTPUT: «MixHash(1 2 3)»