檢視原始碼 sets (stdlib v6.2)
集合是不包含重複元素的元素集合。
此模組使用的集合資料表示應被其他模組視為不透明。抽象來說,表示法是現有 Erlang 項的複合類型。請參閱關於資料類型的註解。任何假設了解格式的程式碼都非常不可靠。
此模組提供與 ordsets
模組相同的介面,但具有未定義的表示法。一個不同之處是,當此模組認為兩個元素若不匹配(=:=
)則不同時,ordsets
認為兩個元素若且唯若不相等(==
)則不同。
Erlang/OTP 24.0 引入了新的效能更高的集合內部表示法。開發人員可以透過將 {version, 2}
旗標傳遞給 new/1
和 from_list/2
來使用此新的表示法,例如 sets:new([{version, 2}])
。此新的表示法將在未來的 Erlang/OTP 版本中成為預設值。適用於兩個集合的函數,例如 union/2
和類似函數,將適用於不同版本的集合。在這種情況下,無法保證返回集合的版本。可以使用 sets:from_list(sets:to_list(Old), [{version,2}])
從舊版本顯式轉換為新版本。
相容性
此模組中的下列函數也存在於 gb_sets
和 ordsets
模組中並提供相同的功能。也就是說,僅透過變更每個呼叫的模組名稱,您可以嘗試不同的集合表示法。
add_element/2
del_element/2
filter/2
filtermap/2
fold/3
from_list/1
intersection/1
intersection/2
is_element/2
is_empty/1
is_equal/2
is_set/1
is_subset/2
map/2
new/0
size/1
subtract/2
to_list/1
union/1
union/2
注意
雖然三個集合實作在上述函數方面提供相同的功能,但它們的整體行為可能不同。如前所述,此模組認為元素若且唯若不匹配(
=:=
)則不同,而ordsets
和gb_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
另請參閱
摘要
函數
傳回由 Set1
插入 Element
所形成的新集合。
傳回 Set1
,但已移除 Element
。
使用布林函數 Pred
過濾 Set1
中的元素。
使用函數 Fun
過濾和映射 Set1
中的元素。
將 Function
折疊到 Set
中的每個元素,並傳回累加器的最終值。求值順序未定義。
傳回 List
中元素的集合。
傳回給定版本 List
中元素的集合。
傳回非空集合列表的交集。
傳回 Set1
和 Set2
的交集。
如果 Set1
和 Set2
是不相交的(沒有共同的元素),則傳回 true
,否則傳回 false
。
如果 Element
是 Set
的元素,則傳回 true
,否則傳回 false
。
如果 Set
是空集合,則傳回 true
,否則傳回 false
。
如果 Set1
和 Set2
相等,也就是說,當一個集合的每個元素也是另一個集合的成員時,則傳回 true
,否則傳回 false
。
如果 Set
看起來是元素的集合,則傳回 true
,否則傳回 false
。
當 Set1
的每個元素也是 Set2
的成員時,則傳回 true
,否則傳回 false
。
使用映射函數 Fun
映射 Set1
中的元素。
傳回新的空集合。
傳回給定版本新的空集合。
傳回 Set
中的元素數量。
僅傳回 Set1
中不是 Set2
元素的元素。
將 Set
的元素傳回為列表。返回元素的順序未定義。
傳回集合列表的合併(聯集)集合。
傳回 Set1
和 Set2
的合併(聯集)集合。
類型
函數
傳回由 Set1
插入 Element
所形成的新集合。
傳回 Set1
,但已移除 Element
。
-spec filter(Pred, Set1) -> Set2 when Pred :: fun((Element) -> boolean()), Set1 :: set(Element), Set2 :: set(Element).
使用布林函數 Pred
過濾 Set1
中的元素。
-spec filtermap(Fun, Set1) -> Set2 when Fun :: fun((Element1) -> boolean() | {true, Element2}), Set1 :: set(Element1), Set2 :: set(Element1 | Element2).
使用函數 Fun
過濾和映射 Set1
中的元素。
-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
中元素的集合。
-spec from_list(List, [{version, 1..2}]) -> Set when List :: [Element], Set :: set(Element).
傳回給定版本 List
中元素的集合。
傳回非空集合列表的交集。
-spec intersection(Set1, Set2) -> Set3 when Set1 :: set(Element), Set2 :: set(Element), Set3 :: set(Element).
傳回 Set1
和 Set2
的交集。
如果 Set1
和 Set2
是不相交的(沒有共同的元素),則傳回 true
,否則傳回 false
。
如果 Element
是 Set
的元素,則傳回 true
,否則傳回 false
。
如果 Set
是空集合,則傳回 true
,否則傳回 false
。
如果 Set1
和 Set2
相等,也就是說,當一個集合的每個元素也是另一個集合的成員時,則傳回 true
,否則傳回 false
。
如果 Set
看起來是元素的集合,則傳回 true
,否則傳回 false
。
請注意,測試是淺層的,對於任何與集合的可能表示形式一致的項,都將傳回 true
。另請參閱關於資料類型的註解。
當 Set1
的每個元素也是 Set2
的成員時,則傳回 true
,否則傳回 false
。
-spec map(Fun, Set1) -> Set2 when Fun :: fun((Element1) -> Element2), Set1 :: set(Element1), Set2 :: set(Element2).
使用映射函數 Fun
映射 Set1
中的元素。
傳回新的空集合。
傳回給定版本新的空集合。
-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(Set1, Set2) -> Set3 when Set1 :: set(Element), Set2 :: set(Element), Set3 :: set(Element).
傳回 Set1
和 Set2
的合併(聯集)集合。