【问题标题】:is there a Built-in function to check if one list is contained in another? in ELIXIR or ERLANG是否有内置函数来检查一个列表是否包含在另一个列表中?在 ELIXIR 或 ERLANG
【发布时间】:2018-05-02 13:06:57
【问题描述】:

如果不使用brute-force(即逐个元素检查),是否有一个内置函数可以检查一个列表是否包含在另一个列表中?

【问题讨论】:

  • 最终使用了什么?
  • ordsets:is_subset(ordsets:from_list(List_Contained), ordsets:from_list(List_Containing))。
  • 1> L1 = "abcdefghijklmnopqrstuvwxyz"。 “abcdefghijklmnopqrstuvwxyz” 2> 列表:所有(乐趣(X)-> 列表:成员(X,L1)结束,MyList = “abc”)。
  • L1 == [X || X

标签: erlang elixir


【解决方案1】:

我不确定这是否是一种蛮力,它有一些限制,但可以使用Kernel.--/2

{l1, l2} = {[1,2,3], [1,2,3,4]}
l1 -- l2
#⇒ []
l2 -- l1
#⇒ [4]

请求的确切检查器是:

Enum.count(contained -- container) == 0

或者,正如@Hynek-Pichi-Vychodil 在 cmets 中所指出的那样

contained -- container == []

【讨论】:

  • 它打破了这个:[1,2,3] -- [1,2,4] [3] 因此,需要额外的努力来确保它是一个真正的子列表
  • @KevinJohnson 我不确定我是否遵循。不是空的?——因此不是,一个列表不包含在另一个列表中。
  • @mudasobwa 不应该受到尊重吗? Enum.count(l1 -- l2) == 0
  • @CharlesOkwuagwu 虽然您的措辞不包含任何l1l2,但这是完全合法的:) 我的意思是,如果l2 完全包含在@ 中,则上面的最后一个调用返回true 987654332@。更新了答案。
  • contained -- container == [] 会更有效率。
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
相关资源
最近更新 更多