Erlang列表生成

3

我有两个列表:

["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"]。

List = lists:filter(fun(X) -> lists:last(X) =:= D end, S),

但是在这个例子中,D是一个列表,而我需要列表中的元素。

怎么做呢?

2个回答

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"]]

2
稍微更直接的写法是:
lists:filter(fun (X) -> lists:member(lists:last(X), D) end, S).

或者使用列表推导式:
[ X || X <- S, lists:member(lists:last(X), D) ].

如果找到了元素,它们会更快,因为它们不会尝试匹配D中的更多元素。在推导式中展开D就可以做到这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接