# 集合 集合是持久化哈希集合:由唯一值组成的无序集合。用 `^{ ... }` 字面量构建,并用下面的操作进行组合;这些操作返回新集合,不修改其输入。字面量语法、成员判断(`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}
## 另见 - 集合 — 集合字面量、`in?` 和迭代 - 列表 — 持久化列表操作 - 映射 — 持久化映射操作