2010-04-06 92 views
6

我有元组,比如列表,匹配和删除项目

[{x, a, y}, {x, b, y}]. 

是否有一个内置的函数(或者我可以使用内建函数的组合),以删除匹配{x, _, y}所有元组,如在元组中的第一项和第三项的匹配和删除,忽略第二项?

回答

13

lists:filter/1功能符合您的需求,例如,

Ls = [{x,a,y}, {a,b,c}], 
F = fun ({x,_,y}) -> false ; (_) -> true end, 
lists:filter(F, Ls). 

您还可以使用列表解析,它就像列表的组合:map/2和lists:filter/2。

[L || L <- Ls, F(L)] 

如果你的断言是相反的,因为你只是想那些匹配{X,_,Y}你可以写如下,由于发电机会过滤掉那些不匹配的格局。

[L || {x,_,y}=L <- Ls] 
+0

我跟着你如何使用列表:上面的过滤器,但如果我想用变量做它不起作用。 像这样: F = fun({_,_ Channel}) - > true; (_) - > false end, ClientsOnChannel = lists:filter(F(),NewServerState#server_st.client_channel), 看来Channel在F范围中被定义。如何让它在外部范围中定义的“通道”上过滤? – Kersch 2015-02-27 15:59:47