匹配和删除元组列表中的项目

Sap*_*ppe 6 erlang tuples list pattern-matching

我有一个元组列表,比方说,

[{x, a, y}, {x, b, y}].
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ian 14

列表:过滤器/ 1功能的需求,如火柴

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

您还可以使用列表推导,它类似于列表的组合:map/2和lists:filter/2.

[L || L <- Ls, F(L)]
Run Code Online (Sandbox Code Playgroud)

如果您的谓词相反,那么您只需要匹配{x,_,y}的那些,您可以将其写为如下,因为生成器将过滤掉与模式不匹配的那些.

[L || {x,_,y}=L <- Ls]
Run Code Online (Sandbox Code Playgroud)