2010-04-06 139 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