2010-04-06 10 views
6

Ich habe eine Liste von Tupeln, sagen wir,Matching und Löschen von Elementen in einer Liste von Tupeln

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

Gibt es eine eingebaute Funktion (oder kann ich verwenden eine Kombination von BIF) alle Tupel löschen {x, _, y} passend , wie in Übereinstimmung und Löschen basierend auf dem ersten und dritten Term in den Tupeln, ignorieren die zweite?

Antwort

13

Die Funktion lists:filter/1 entspricht Ihrem Bedarf, z.

Sie können auch List Comprehensions verwenden, die wie eine Kombination von Listen ist: map/2 und Listen: filter/2.

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

Wenn Ihr Prädikat das Gegenteil, dass Sie war, wollte nur diejenigen passende {x, _, y} Sie es wie folgt schreiben könnte, da der Generator herauszufiltern diejenigen, die nicht dem Muster entsprechen.

+0

Ich folgte, wie Sie Listen verwendet: Filter oben, aber wenn ich das mit einer Variablen tun will, funktioniert es nicht. Gefällt mir: F = Spaß ({_, _ Channel}) -> true; (_) -> false end, ClientsOnChannel = lists: Filter (F(), NewServerState # server_st.client_channel), Es scheint, als ob Channel im F-Bereich definiert wird. Wie kann ich nach "Channel" filtern, das im äußeren Bereich definiert ist? – Kersch