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