2017-05-15 71 views
1

我有一個列表和一個列表。按內容而不是按順序查找列表

lists = [[3, 9, 1], [3, 9, 5], [4, 2], [8, 11], [9, 3, 5]] 
source = [3, 5, 9] 

我怎樣才能找到lists包含的source不論其爲了所有元素的所有子列表? lists中有2個這樣的子列表:[3,9,5]和[9,3,5]。

回答

2

快速查看列表方法給我帶來了這裏。

lists = [[3, 9, 1], [3, 9, 5], [4, 2], [9, 3, 5]] 
s = [9,3,5] 
Enum.filter(lists, fn x -> Enum.sort(x) == Enum.sort(s) end) 
# =>[[3, 9, 5], [9, 3, 5]] 

UPDATE: 您還可以排序s並將其分配給一個變量,

t = Enum.sort(s) 

然後檢查等價。

Enum.filter(lists, fn x -> Enum.sort(x) == t end) 

我相信這將是一個更好的解決方案。

1

使用的Enum.memberEnum.all組合過濾列表:

lists |> Enum.filter(fn x -> 
    Enum.all?(source, fn y -> Enum.member?(x, y) end) 
end) 
相關問題