MapSet
MapSet
在集合上工作的函数。
MapSet
是Elixir中的“去”设置数据结构。一组可以使用MapSet.new/0
:
iex> MapSet.new
#MapSet<[]>
一个集合可以包含任何类型的元素,并且集合中的元素不必具有相同的类型。根据定义,集合不能包含重复的元素:在已经存在的集合中插入一个元素时,插入仅仅是一个无操作。
iex> map_set = MapSet.new
iex> MapSet.put(map_set, "foo")
#MapSet<["foo"]>
iex> map_set |> MapSet.put("foo") |> MapSet.put("foo")
#MapSet<["foo"]>
MapSet
在内部使用%MapSet{}
结构体来表示。这个结构可以用于任何需要模式匹配的东西MapSet
:
iex> match?(%MapSet{}, MapSet.new())
true
但请注意,struct字段是私有的,不能直接访问; 使用本模块中的功能来对组执行操作。
MapSet
s也可以从其他集合类型的数据结构开始构造:例如参见MapSet.new/1
或Enum.into/2
。
摘要
类型
t()t(value)value()
功能
delete(map_set, value)
删除value
从map_set
difference(map_set1, map_set2)
返回一组map_set1
没有成员map_set2
disjoint?(map_set1, map_set2)
检查map_set1
和map_set2
没有共同的成员
equal?(map_set1, map_set2)
检查两个集合是否相等
intersection(map_set, map_set)
返回一个仅包含以下成员的集合map_set1
和map_set2
有共同之处
member?(map_set, value)
检查map_set
含value
new()
返回一个新集。
new(enumerable)
从可枚举的
new(enumerable, transform)
通过转换函数从可枚举的集合创建集合。
put(map_set, value)
插入value
到map_set
if map_set
不包含它
size(map_set)
中的元素数。map_set
subset?(map_set1, map_set2)
检查map_set1
其成员都包含在map_set2
to_list(map_set)
皈依map_set
列到一张清单上
union(map_set1, map_set2)
返回包含map_set1
和map_set2
类型
t()
t() :: t(term)
t(value)
t(value)
value()
value() :: term
功能
delete(map_set, value)
delete(t(val1), val2) :: t(val1) when val1: value, val2: value
value
从中删除map_set
。
返回一个新的集合,它是map_set
没有的副本value
。
实例
iex> map_set = MapSet.new([1, 2, 3])
iex> MapSet.delete(map_set, 4)
#MapSet<[1, 2, 3]>
iex> MapSet.delete(map_set, 2)
#MapSet<[1, 3]>
difference(map_set1, map_set2)
difference(t(val1), t(val2)) :: t(val1) when val1: value, val2: value
返回一个map_set1
没有成员的集合map_set2
。
实例
iex> MapSet.difference(MapSet.new([1, 2]), MapSet.new([2, 3, 4]))
#MapSet<[1]>
disjoint?(map_set1, map_set2)
disjoint?(t, t) :: boolean
检查map_set1
和map_set2
没有共同的成员。
实例
iex> MapSet.disjoint?(MapSet.new([1, 2]), MapSet.new([3, 4]))
true
iex> MapSet.disjoint?(MapSet.new([1, 2]), MapSet.new([2, 3]))
false
equal?(map_set1, map_set2)
equal?(t, t) :: boolean
检查两组是否相等。
元素之间的比较必须使用===
。
实例
iex> MapSet.equal?(MapSet.new([1, 2]), MapSet.new([2, 1, 1]))
true
iex> MapSet.equal?(MapSet.new([1, 2]), MapSet.new([3, 4]))
false
intersection(map_set, map_set)
intersection(t(val), t(val)) :: t(val) when val: value
返回一个仅包含以下成员的集合map_set1
和map_set2
有共同之处。
实例
iex> MapSet.intersection(MapSet.new([1, 2]), MapSet.new([2, 3, 4]))
#MapSet<[2]>
iex> MapSet.intersection(MapSet.new([1, 2]), MapSet.new([3, 4]))
#MapSet<[]>
member?(map_set, value)
member?(t, value) :: boolean
检查是否map_set
包含value
。
实例
iex> MapSet.member?(MapSet.new([1, 2, 3]), 2)
true
iex> MapSet.member?(MapSet.new([1, 2, 3]), 4)
false
new()
new() :: t
返回一个新集。
实例
iex> MapSet.new
#MapSet<[]>
new(enumerable)
new(Enum.t) :: t
从可枚举的集合创建集合。
实例
iex> MapSet.new([:b, :a, 3])
#MapSet<[3, :a, :b]>
iex> MapSet.new([3, 3, 3, 2, 2, 1])
#MapSet<[1, 2, 3]>
new(enumerable, transform)
new(Enum.t, (term -> val)) :: t(val) when val: value
通过转换函数从可枚举的集合创建集合。
实例
iex> MapSet.new([1, 2, 1], fn x -> 2 * x end)
#MapSet<[2, 4]>
put(map_set, value)
put(t(val), new_val) :: t(val | new_val) when val: value, new_val: value
插入value
到map_set
if map_set
不包含它。
实例
iex> MapSet.put(MapSet.new([1, 2, 3]), 3)
#MapSet<[1, 2, 3]>
iex> MapSet.put(MapSet.new([1, 2, 3]), 4)
#MapSet<[1, 2, 3, 4]>
size(map_set)
size(t) :: non_neg_integer
返回中的元素数量map_set
。
实例
iex> MapSet.size(MapSet.new([1, 2, 3]))
3
subset?(map_set1, map_set2)
subset?(t, t) :: boolean
检查是否map_set1
所有成员都包含在内map_set2
。
这个函数检查是否map_set1
是一个子集map_set2
。
实例
iex> MapSet.subset?(MapSet.new([1, 2]), MapSet.new([1, 2, 3]))
true
iex> MapSet.subset?(MapSet.new([1, 2, 3]), MapSet.new([1, 2]))
false
to_list(map_set)
to_list(t(val)) :: [val] when val: value
皈依map_set
一份清单。
实例
iex> MapSet.to_list(MapSet.new([1, 2, 3]))
[1, 2, 3]
union(map_set1, map_set2)
union(t(val1), t(val2)) :: t(val1 | val2) when val1: value, val2: value
返回一个包含所有成员的集合map_set1
和map_set2
。
实例
iex> MapSet.union(MapSet.new([1, 2]), MapSet.new([2, 3, 4]))
#MapSet<[1, 2, 3, 4]>