比较两个列表并返回布尔值

时间:2018-02-19 05:36:50

标签: elixir

我有两个列表

 list1 = [1,2,3,4,5,6,7]
 list2 = [3,4,5]

如果list2中的所有元素都出现在list1中。它应该返回true,否则它将返回false

我考虑过Enum.member?但它将单个元素与列表进行比较而不是完整列表。

我可以用其他任何方式吗?

由于

3 个答案:

答案 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