集合类型
集合模拟了数学集合的概念。 集合的基类型只能是固定大小的序数类型,它们是:
- int8-int16
- uint8/byte-uint16
- char
- enum或等价类型。对有符号整数集合的基类型被定义为在 0 .. MaxSetElements-1 的范围内, 其中 MaxSetElements 目前是2^16。
原因是集合被实现为高性能位向量。尝试声明具有更大类型的集将导致错误:
- var s: set[int64] # 错误: 集合太大
集合可以通过集合构造器来构造: {} 是空集合。 空集合与其它具体的集合类型兼容。构造器也可以用来包含元素(和元素范围):
- type
- CharSet = set[char]
- var
- x: CharSet
- x = {'a'..'z', '0'..'9'} # 构造一个包含'a'到'z'和'0'到'9'的集合
集合支持的操作符:
操作符 | 含义 |
---|---|
A + B | 并集 |
A * B | 交集 |
A - B | 差集 |
A == B | 相等 |
A <= B | 子集 |
A < B | 真子集 |
e in A | 元素 |
e notin A | A不包含元素e |
contains(A, e) | 包含元素e |
card(A) | A的基 (集合A中的元素数量) |
incl(A, elem) | 同 A = A + {elem} |
excl(A, elem) | 同 A = A - {elem} |