2011-02-12 50 views
3

我有2列表:二郎列表生成

[ 「ASD」, 「DSA」]。

[[123,「asd」],[4534,「fgh」]]。

我如何生成下一個列表:我列表每個嵌套列表的尾部=:= 1列表中的其他元素。

在這個例子中:

[ 「ASD」, 「DSA」]。

[[123,「asd」],[4534,「fgh」]]。

「ASD」=:= 「ASD」 - >

輸出列表:

[123, "asd"] 

我嘗試:

這裏S = [[123, 「ASD」], [4534,「fgh」]]。 D = [「asd」,「dsa」]。

列表=列表:過濾器(樂趣(X) - > 列表:最後一個(X)=:= d年底,S),

但d在這個例子列表,我需要列表元素。

怎麼辦?

回答

3

也許是這樣的:

1> [X || X<-[[1,2,4],[7,8,3],[2,5,4],[9,1,6]], Y<-[4,3], lists:last(X)=:=Y].  
[[1,2,4],[7,8,3],[2,5,4]] 

或者,使用您的樣本數據:寫

2> [X || X<-[[123,"asd"], [4534,"fgh"]], Y<-["asd","dsa"], lists:last(X)=:=Y]. 
[[123,"asd"]] 
+0

是的,非常感謝。 – 0xAX 2011-02-12 07:08:11

2

稍微更直接的方式將是:

lists:filter(fun (X) -> lists:member(lists:last(X), D) end, S). 

或列表理解:

[ X || X <- S, lists:member(lists:last(X), D) ]. 

它們有點快,因爲如果找到該元素,它們將不會嘗試匹配D中的更多元素。在理解中擴大D將做到這一點。