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字段是私有的,不能直接访问; 使用本模块中的功能来对组执行操作。

MapSets也可以从其他集合类型的数据结构开始构造:例如参见MapSet.new/1Enum.into/2

摘要

类型

t()t(value)value()

功能

delete(map_set, value)

删除valuemap_set

difference(map_set1, map_set2)

返回一组map_set1没有成员map_set2

disjoint?(map_set1, map_set2)

检查map_set1map_set2没有共同的成员

equal?(map_set1, map_set2)

检查两个集合是否相等

intersection(map_set, map_set)

返回一个仅包含以下成员的集合map_set1map_set2有共同之处

member?(map_set, value)

检查map_setvalue

new()

返回一个新集。

new(enumerable)

从可枚举的

new(enumerable, transform)

通过转换函数从可枚举的集合创建集合。

put(map_set, value)

插入valuemap_setif 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_set1map_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_set1map_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_set1map_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

插入valuemap_setif 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_set1map_set2

实例

iex> MapSet.union(MapSet.new([1, 2]), MapSet.new([2, 3, 4])) #MapSet<[1, 2, 3, 4]>