查看源码 sets (stdlib v6.2)

集合是不包含重复元素的元素集合。

此模块使用的表示集合的数据应被其他模块视为不透明的。抽象地说,该表示是现有 Erlang 项的复合类型。请参阅关于数据类型的说明。任何假设了解格式的代码都处于危险之中。

此模块提供了与 ordsets 模块相同的接口,但表示方式未定义。一个区别是,虽然此模块认为如果两个元素不匹配(=:=),则它们是不同的,但 ordsets 仅当两个元素不比较相等(==)时才认为它们是不同的。

Erlang/OTP 24.0 引入了一种新的更高效的集合内部表示。开发人员可以通过将 {version, 2} 标志传递给 new/1from_list/2 来使用这种新的表示方式,例如 sets:new([{version, 2}])。这种新的表示方式将在未来的 Erlang/OTP 版本中成为默认设置。适用于两个集合的函数,例如 union/2 及类似函数,将适用于不同版本的集合。在这种情况下,无法保证返回的集合的版本。可以使用 sets:from_list(sets:to_list(Old), [{version,2}]) 显式地将旧版本转换为新版本。

兼容性

此模块中的以下函数也存在于 gb_setsordsets 模块中,并提供相同的功能。也就是说,只需更改每个调用的模块名称,即可尝试不同的集合表示。

注意

虽然这三个集合实现针对上述函数提供了相同功能,但它们的整体行为可能有所不同。如前所述,此模块仅当元素不匹配(=:=)时才认为它们是不同的,而 ordsetsgb_sets 仅当元素不比较相等(==)时才认为它们是不同的。

示例

1> sets:is_element(1.0, sets:from_list([1])).
false
2> ordsets:is_element(1.0, ordsets:from_list([1])).
true
2> gb_sets:is_element(1.0, gb_sets:from_list([1])).
true

另请参阅

gb_sets, ordsets

总结

类型

new/0 返回。

函数

返回一个由 Set1 和插入的 Element 构成的新集合。

返回 Set1,但删除了 Element

使用布尔函数 Pred 过滤 Set1 中的元素。

使用函数 Fun 过滤和映射 Set1 中的元素。

Set 中的每个元素执行 Function 折叠,并返回累加器的最终值。评估顺序未定义。

返回 List 中元素的集合。

返回给定版本的 List 中元素的集合。

返回非空集合列表的交集。

返回 Set1Set2 的交集。

如果 Set1Set2 不相交(没有共同元素),则返回 true,否则返回 false

如果 ElementSet 的元素,则返回 true,否则返回 false

如果 Set 是空集,则返回 true,否则返回 false

如果 Set1Set2 相等,即当一个集合的每个元素也是另一个集合的成员时,则返回 true,否则返回 false

如果 Set 看起来是元素集合,则返回 true,否则返回 false

Set1 的每个元素也是 Set2 的成员时,返回 true,否则返回 false

使用映射函数 Fun 映射 Set1 中的元素。

返回一个新的空集合。

返回给定版本的新空集合。

返回 Set 中的元素数量。

仅返回 Set1 中那些不是 Set2 元素的元素。

以列表形式返回 Set 的元素。返回元素的顺序未定义。

返回集合列表的合并(并集)集合。

返回 Set1Set2 的合并(并集)集合。

类型

-type set() :: set(_).
-opaque set(Element)

new/0 返回。

函数

链接到此函数

add_element(Element, Set1)

查看源码
-spec add_element(Element, Set1) -> Set2 when Set1 :: set(Element), Set2 :: set(Element).

返回一个由 Set1 和插入的 Element 构成的新集合。

链接到此函数

del_element(Element, Set1)

查看源码
-spec del_element(Element, Set1) -> Set2 when Set1 :: set(Element), Set2 :: set(Element).

返回 Set1,但删除了 Element

-spec filter(Pred, Set1) -> Set2
                when Pred :: fun((Element) -> boolean()), Set1 :: set(Element), Set2 :: set(Element).

使用布尔函数 Pred 过滤 Set1 中的元素。

链接到此函数

filtermap(Fun, Set1)

查看源码 (自 OTP 27.0 起)
-spec filtermap(Fun, Set1) -> Set2
                   when
                       Fun :: fun((Element1) -> boolean() | {true, Element2}),
                       Set1 :: set(Element1),
                       Set2 :: set(Element1 | Element2).

使用函数 Fun 过滤和映射 Set1 中的元素。

链接到此函数

fold(Function, Acc0, Set)

查看源码
-spec fold(Function, Acc0, Set) -> Acc1
              when
                  Function :: fun((Element, AccIn) -> AccOut),
                  Set :: set(Element),
                  Acc0 :: Acc,
                  Acc1 :: Acc,
                  AccIn :: Acc,
                  AccOut :: Acc.

Set 中的每个元素执行 Function 折叠,并返回累加器的最终值。评估顺序未定义。

-spec from_list(List) -> Set when List :: [Element], Set :: set(Element).

返回 List 中元素的集合。

链接到此函数

from_list/2

查看源码 (自 OTP 24.0 起)
-spec from_list(List, [{version, 1..2}]) -> Set when List :: [Element], Set :: set(Element).

返回给定版本的 List 中元素的集合。

链接到此函数

intersection(SetList)

查看源码
-spec intersection(SetList) -> Set when SetList :: [set(Element), ...], Set :: set(Element).

返回非空集合列表的交集。

链接到此函数

intersection(Set1, Set2)

查看源码
-spec intersection(Set1, Set2) -> Set3
                      when Set1 :: set(Element), Set2 :: set(Element), Set3 :: set(Element).

返回 Set1Set2 的交集。

链接到此函数

is_disjoint(Set1, Set2)

查看源码
-spec is_disjoint(Set1, Set2) -> boolean() when Set1 :: set(Element), Set2 :: set(Element).

如果 Set1Set2 不相交(没有共同元素),则返回 true,否则返回 false

链接到此函数

is_element(Element, Set)

查看源码
-spec is_element(Element, Set) -> boolean() when Set :: set(Element).

如果 ElementSet 的元素,则返回 true,否则返回 false

链接到此函数

is_empty(Set)

查看源码 (自 OTP 21.0 起)
-spec is_empty(Set) -> boolean() when Set :: set().

如果 Set 是空集,则返回 true,否则返回 false

链接到此函数

is_equal(Set1, Set2)

查看源码 (自 OTP 27.0 起)
-spec is_equal(Set1, Set2) -> boolean() when Set1 :: set(), Set2 :: set().

如果 Set1Set2 相等,即当一个集合的每个元素也是另一个集合的成员时,则返回 true,否则返回 false

-spec is_set(Set) -> boolean() when Set :: term().

如果 Set 看起来是元素集合,则返回 true,否则返回 false

请注意,该测试是浅层的,对于任何与集合的可能表示形式一致的项都将返回 true。另请参阅关于数据类型的说明。

链接到此函数

is_subset(Set1, Set2)

查看源码
-spec is_subset(Set1, Set2) -> boolean() when Set1 :: set(Element), Set2 :: set(Element).

Set1 的每个元素也是 Set2 的成员时,返回 true,否则返回 false

链接到此函数

map(Fun, Set1)

查看源码 (自 OTP 27.0 起)
-spec map(Fun, Set1) -> Set2
             when Fun :: fun((Element1) -> Element2), Set1 :: set(Element1), Set2 :: set(Element2).

使用映射函数 Fun 映射 Set1 中的元素。

-spec new() -> set(none()).

返回一个新的空集合。

链接到此函数

new/1

查看源码 (自 OTP 24.0 起)
-spec new([{version, 1..2}]) -> set(none()).

返回给定版本的新空集合。

-spec size(Set) -> non_neg_integer() when Set :: set().

返回 Set 中的元素数量。

链接到此函数

subtract(Set1, Set2)

查看源码
-spec subtract(Set1, Set2) -> Set3 when Set1 :: set(Element), Set2 :: set(Element), Set3 :: set(Element).

仅返回 Set1 中那些不是 Set2 元素的元素。

-spec to_list(Set) -> List when Set :: set(Element), List :: [Element].

以列表形式返回 Set 的元素。返回元素的顺序未定义。

-spec union(SetList) -> Set when SetList :: [set(Element)], Set :: set(Element).

返回集合列表的合并(并集)集合。

-spec union(Set1, Set2) -> Set3 when Set1 :: set(Element), Set2 :: set(Element), Set3 :: set(Element).

返回 Set1Set2 的合并(并集)集合。