简介§

六个集合类是 SetSetHashBagBagHashMixMixHash。它们都具有相似的语义。

简而言之,这些类通常包含无序的对象集合,类似于一个对象哈希QuantHash角色是所有这些类实现的角色:因此它们也被称为QuantHashes。

SetSetHash也实现了Setty角色,BagBagHash实现了Baggy角色,MixMixHash实现了Mixy角色(它本身实现了Baggy角色)。

集合只考虑集合中对象的存在与否,包可以包含多个相同类型的对象,而混合还允许分数(和负数)权重。常规版本是不可变的,-Hash版本是可变的。

让我们详细说明一下。如果您想将对象收集到一个容器中,但您不关心这些对象的顺序,Raku 提供了这些无序集合类型。由于是无序的,这些容器在查找元素或处理重复项方面可能比Lists 或Arrays 更有效率。

另一方面,如果您想获取没有重复的包含对象(元素),并且您只关心元素是否在集合中,您可以使用SetSetHash.

如果您想消除重复但仍然保留顺序,请查看unique例程,用于List.

如果您想跟踪每个对象出现的次数,您可以使用BagBagHash。在这些Baggy容器中,每个元素都有一个权重(一个无符号整数),表示相同对象在集合中包含的次数。

类型MixMixHash类似于BagBagHash,但它们也允许分数和负数权重

SetBagMix不可变类型。如果您想在容器构建后添加或删除元素,请使用可变变体SetHashBagHashMixHash.

首先,就它们而言,相同的对象指的是同一个元素 - 其中身份是使用WHICH方法确定的(即与===运算符检查身份的方式相同)。对于像Str这样的值类型,这意味着具有相同的值;对于像Array这样的引用类型,这意味着引用同一个对象实例。

其次,它们提供了一个类似哈希的接口,其中集合的实际元素(可以是任何类型的对象)是“键”,关联的权重是“值”。

$a 的类型如果 $b 是一个元素,则 $a{$b} 的值如果 $b 不是一个元素,则 $a{$b} 的值
Set / SetHashTrueFalse
Bag / BagHash一个正整数0
Mix / MixHash一个非零实数0

具有集合语义的运算符§

有几个中缀运算符专门用于使用QuantHash语义执行常见操作。由于这是一个很长的词,这些运算符通常被称为“集合运算符”。

并不意味着这些运算符的参数必须始终是Set,甚至是一个更通用的QuantHash。它只是意味着应用于运算符的逻辑是集合论的逻辑。

这些中缀可以使用表示函数的 Unicode 字符(如 )或等效的 ASCII 版本(如 (elem)(|))来编写。

因此,显式地使用Set(或BagMix)对象与这些中缀一起使用是不必要的。所有集合运算符都适用于所有可能的参数,包括(从 6.d 开始)那些不是显式集合类型的参数。如果需要,内部会进行强制转换:但在许多情况下,实际上并不需要。

但是,如果BagMix是这些集合运算符的参数之一,则语义将升级到该类型(如果两种类型都使用,则Mix优先于Bag)。

返回Bool§的集合运算符

中缀 (elem),中缀 ∈§

如果 $a$b元素,则返回 True,否则返回 False更多信息维基百科定义.

infix ∉§

如果 $a 不是 $b 的元素,则返回 True,否则返回 False更多信息维基百科定义.

infix (cont), infix ∋§

如果 $a 包含 $b 作为元素,则返回 True,否则返回 False更多信息维基百科定义.

infix ∌§

如果 $a 包含 $b,则返回 True,否则返回 False更多信息维基百科定义.

infix (<=), infix ⊆§

如果 $a$b子集或等于 $b,则返回 True,否则返回 False更多信息维基百科定义.

infix ⊈§

如果 $a 不是 $b子集也不等于 $b,则返回 True,否则返回 False更多信息维基百科定义.

infix (<), infix ⊂§

如果 $a$b真子集,则返回 True,否则返回 False更多信息维基百科定义.

infix ⊄§

如果 $a 不是 $b真子集,则返回 True,否则返回 False更多信息维基百科定义.

infix (>=), infix ⊇§

如果 $a$b超集或等于 $b,则返回 True,否则返回 False更多信息维基百科定义.

infix ⊉§

如果 $a 不是 $b超集也不等于 $b,则返回 True,否则返回 False更多信息维基百科定义.

infix (>), infix ⊃§

如果 $a$b真超集,则返回 True,否则返回 False更多信息维基百科定义.

infix ⊅§

如果 $a 不是 $b真超集,则返回 True,否则返回 False更多信息维基百科定义.

infix (==), infix ≡§

如果 $a$b 相同,则返回 True,否则返回 False更多信息维基百科定义.

从 2020.07 Rakudo 编译器版本开始可用。使用旧版 Rakudo 的用户可以安装 Set::Equality 模块以获得相同的功能。

infix ≢§

如果 $a$b 不相同,则返回 True,否则返回 False更多信息维基百科定义.

从 2020.07 Rakudo 编译器版本开始可用。使用旧版 Rakudo 的用户可以安装 Set::Equality 模块以获得相同的功能。

返回 QuantHash§ 的集合运算符

infix (|), infix ∪§

返回所有参数的并集更多信息维基百科定义.

infix (&), infix ∩§

返回所有参数的交集更多信息维基百科定义.

infix (-), infix ∖§

返回所有参数的集合差更多信息维基百科定义.

infix (^), infix ⊖§

返回所有参数的对称集合差更多信息维基百科定义.

返回 Baggy§

infix (.), infix ⊍§

返回参数的 Baggy 乘法更多信息.

infix (+), infix ⊎§

返回参数的 Baggy 加法更多信息.

术语 ∅§

空集。 更多信息维基百科定义.