檢視原始碼 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 中的元素。

Function 折疊到 Set 中的每個元素,並傳回累加器的最終值。求值順序未定義。

傳回 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.

Function 折疊到 Set 中的每個元素,並傳回累加器的最終值。求值順序未定義。

-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 中元素的集合。

-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。另請參閱關於資料類型的註解。

-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 中的元素數量。

-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 的合併(聯集)集合。