Сопоставление и удаление элементов в списке кортежей - PullRequest
6 голосов
/ 07 апреля 2010

У меня есть список кортежей, скажем,

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

Существует ли встроенная функция (или я могу использовать комбинацию BIF) для удаления всех кортежей, соответствующих {x, _, y}, как при сопоставлении и удалении на основе первого и третьего члена в кортежах, игнорируя второе?

1 Ответ

14 голосов
/ 07 апреля 2010

Списки : функция filter / 1 соответствует вашим потребностям, например,

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

Вы также можете использовать списки, которые представляют собой комбинацию списков: карта / 2 и списки: фильтр / 2.

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

Если ваш предикат был противоположным, в том смысле, что вам нужны только те, которые соответствуют {x, _, y}, вы можете написать его следующим образом, потому что генератор отфильтрует те, которые не соответствуют шаблону.

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