Elixir:检查数组是否包含另一个数组的所有值
Elixir: check array contains all the values of another array
我有两个数组:
arr1 = [1,2,3]
arr2 = [2,3]
检查 arr2
中的所有值是否包含在 arr1
中的最方便的方法是什么。
如果您只想检查一个列表中的所有元素是否都存在于另一个列表中,您可以简单地使用 --
使用运算符左侧的较短列表:
iex> [2, 3] -- [1, 2, 3]
[]
如果第一个列表中的所有元素都出现在第二个列表中,则结果应该是一个空列表。
但是请注意,这并不能说明某些情况,例如,如果您的第一个列表有一个重复元素,而另一个列表有该元素,但只有一次,您不会得到一个空的名单:
iex> [2, 3, 3] -- [1, 2, 3]
[3]
但在那种情况下,从技术上讲,第二个列表不包含第一个列表中的所有元素。
如果您只想检查元素是否存在,还有其他简单的解决方案,例如:
Enum.all?([2, 3, 3], &Enum.member?([1, 2, 3], &1))
但不确定这有多有效,因为对于第一个列表的每个元素,您正在检查它是否存在于第二个列表中(但是,一旦一个元素不符合,它就会停止检查Enum
中的条件和函数通常经过优化,因此它可能足够好)
另一种选择是使用 MapSet
。
你可以这样做:
MapSet.subset?(MapSet.new([2, 3]), MapSet.new([1, 2, 3]))
这也适用于重复元素,因为 MapSet 以集合的形式工作,因此其中不能有重复元素。
我有两个数组:
arr1 = [1,2,3]
arr2 = [2,3]
检查 arr2
中的所有值是否包含在 arr1
中的最方便的方法是什么。
如果您只想检查一个列表中的所有元素是否都存在于另一个列表中,您可以简单地使用 --
使用运算符左侧的较短列表:
iex> [2, 3] -- [1, 2, 3]
[]
如果第一个列表中的所有元素都出现在第二个列表中,则结果应该是一个空列表。
但是请注意,这并不能说明某些情况,例如,如果您的第一个列表有一个重复元素,而另一个列表有该元素,但只有一次,您不会得到一个空的名单:
iex> [2, 3, 3] -- [1, 2, 3]
[3]
但在那种情况下,从技术上讲,第二个列表不包含第一个列表中的所有元素。
如果您只想检查元素是否存在,还有其他简单的解决方案,例如:
Enum.all?([2, 3, 3], &Enum.member?([1, 2, 3], &1))
但不确定这有多有效,因为对于第一个列表的每个元素,您正在检查它是否存在于第二个列表中(但是,一旦一个元素不符合,它就会停止检查Enum
中的条件和函数通常经过优化,因此它可能足够好)
另一种选择是使用 MapSet
。
你可以这样做:
MapSet.subset?(MapSet.new([2, 3]), MapSet.new([1, 2, 3]))
这也适用于重复元素,因为 MapSet 以集合的形式工作,因此其中不能有重复元素。