# 集合
集合是持久化哈希集合:由唯一值组成的无序集合。用 `^{ ... }` 字面量构建,并用下面的操作进行组合;这些操作返回新集合,不修改其输入。字面量语法、成员判断(`in?`)、迭代和转换见 集合;本页是操作目录。全部五个函数都是标准库原生函数,无需导入即可使用。
## 函数
| 函数 | 用途 |
|---|---|
| `union a b` | 两个集合中所有元素的集合 |
| `intersection a b` | 两个集合共有的元素 |
| `difference a b` | 在 `a` 中但不在 `b` 中的元素 |
| `subset? a b` | 当 `a` 的每个元素也在 `b` 中时为 `true` |
| `superset? a b` | 当 `a` 包含 `b` 的每个元素时为 `true` |
说明:
- 三个集合操作返回新集合;输入永远不会被修改。
- `subset?` 和 `superset?` 是返回布尔值的关系谓词。每个集合都是自身的子集和超集,空集是每个集合的子集。
- 重复元素在构造时合并:`^{ :a :a :b }` 即 `^{:a :b}`。
- 成员判断使用 `in?`(`[in? $roles :admin]`),而 `into ^{}` 可从任意序列构建集合。
## 示例
def a ^{ 1 2 3 } def b ^{ 2 3 4 } [union $a $b] # => ^{1 2 3 4} [intersection $a $b] # => ^{2 3} [difference $a $b] # => ^{1} [subset? ^{ 1 2 } $a] # => true [superset? $a ^{ 1 2 }] # => true [subset? $a $b] # => false [superset? ^{ 1 2 } ^{ 1 2 }] # => true # Membership and construction [in? ^{ :admin :user } :admin] # => true [into ^{} [map { $it }] @{ 1 2 2 }] # => ^{1 2} ^{ :a :a :b } # => ^{:a :b} # Comparing capabilities def editors ^{ :read :write } def admins ^{ :read :write :delete } [subset? $editors $admins] # => true [difference $admins $editors] # => ^{:delete}