我有两个列表
list1 = [1,2,3,4,5,6,7]
list2 = [3,4,5]
如果list2中的所有元素都出现在list1中。它应该返回true
,否则它将返回false
。
我考虑过Enum.member?但它将单个元素与列表进行比较而不是完整列表。
我可以用其他任何方式吗?
由于
答案 0 :(得分:3)
检查length(list2 -- list1)
是否等于零
答案 1 :(得分:2)
我会在这里使用MapSet.subset?/2
:
iex(1)> list1 = [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
iex(2)> list2 = [3, 4, 5]
[3, 4, 5]
iex(3)> MapSet.new(list2) |> MapSet.subset?(MapSet.new(list1))
true
iex(4)> list2 = [3, 4, 5, 9]
[3, 4, 5, 9]
iex(5)> MapSet.new(list2) |> MapSet.subset?(MapSet.new(list1))
false
这将在O(n log n)
时间内运行,而不是在Kernel.--/2
中运行的O(n^2)
。 (尽管如此,这对于小名单并没有产生显着影响。)
答案 2 :(得分:0)
您可以使用MapSet.equal?:
iex(1)> MapSet.equal?(MapSet.new(list1), MapSet.new(list2))
true
iex(2)> list1 = [1,2,3,4,5,6,7]
[1, 2, 3, 4, 5, 6, 7]
iex(3)> list2 = [3,4,5]
[3, 4, 5]
iex(4)> MapSet.equal?(MapSet.new(list1), MapSet.new(list2))
false