2010-04-06 26 views
6

que tienen una lista de tuplas, por ejemplo,a juego y eliminar elementos de la lista de tuplas

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

¿Existe una función incorporada (o puedo usar una combinación de BIF) para borrar todas las tuplas que emparejan {x, _, y} , como en match and delete basado en el primer y tercer término en las tuplas, ignorando el segundo?

Respuesta

13

La función lists:filter/1 coincide con su necesidad, p.

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

También puede utilizar las listas por comprensión, que es como una combinación de listas: mapa/2 y estados: filtro/2.

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

Si el predicado era lo contrario, de que sólo querían aquellas que se ajusten {x, _, y} se podría escribir como siguiente, debido a que el generador filtrará los que no coincida con el patrón.

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

Seguí cómo se utilizaban las listas: filtrar arriba pero si quiero hacer eso con una variable no funciona. Me gusta esto: F = fun ({_, _ Channel}) -> true; (_) -> fin falso, ClientesOnCanalista = listas: filtro (F(), NewServerState # server_st.client_channel), Parece que Channel se define en el alcance F. ¿Cómo hago para filtrar en "Canal" definido en el alcance externo? – Kersch

Cuestiones relacionadas