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

Elixir 比较两个列表并返回布尔值,elixir,Elixir,我有两张单子 list1 = [1,2,3,4,5,6,7] list2 = [3,4,5] 如果列表2中的所有元素都出现在列表1中。它应该返回true,否则它将返回false 我考虑过Enum.member?但它将单个元素与列表进行比较,而不是完整的列表 还有别的办法吗 谢谢检查长度(list2--list1)是否等于零检查长度(list2--list1)是否等于零我会使用地图集。子集?/2这里: iex(1)> list1 = [1, 2, 3, 4, 5, 6, 7] [1,

我有两张单子

 list1 = [1,2,3,4,5,6,7]
 list2 = [3,4,5]
如果列表2中的所有元素都出现在列表1中。它应该返回
true
,否则它将返回
false

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

还有别的办法吗


谢谢

检查
长度(list2--list1)
是否等于零

检查
长度(list2--list1)
是否等于零

我会使用
地图集。子集?/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)
时间内运行。(但这对小列表没有显著影响。)

我会在这里使用
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)
时间内运行。(不过,这对小列表不会产生显著影响。)

您可以使用:

您可以使用:


谢谢,我不知道MapSet方法。可能值得注意的是,根据定义,如果使用MapSet,列表中不能有重复的元素。我不知道这是否是OP的问题,但需要注意的是。我不知道MapSet方法。可能值得注意的是,根据定义,如果使用MapSet,列表中不能有重复的元素。我不知道这是否是OP的问题,但需要注意。谢谢。很好的解决方案,谢谢。很好的解决方案。