2010-04-06 11 views
6

Ho una lista di tuple, diciamo,coordinati ed eliminazione di elementi in lista di tuple

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

c'è una funzione built-in (o posso utilizzare una combinazione di BIFs) per cancellare tutte le tuple corrispondenti {x, _, y} , come in corrispondenza e cancellazione in base al primo e al terzo termine nelle tuple, ignorando il secondo?

risposta

13

La funzione lists:filter/1 corrisponde alla necessità dell'utente, ad es.

È anche possibile utilizzare le list comprehensions, che è come una combinazione di liste: map/2 e liste: filter/2.

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

Se il predicato era l'opposto, nel senso che si voleva solo quelli corrispondenti {x, _, y} si potrebbe scrivere come in seguito, perché il generatore filtrare quelli che non corrisponde al modello.

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

Ho seguito come hai usato le liste: filtra sopra ma se voglio farlo con una variabile non funziona. In questo modo: F = divertimento ({_, _ Canale}) -> vero; (_) -> false end, ClientsOnChannel = liste: filtro (F(), NewServerState # server_st.client_channel), Sembra che il canale venga definito nell'ambito F. Come faccio a filtrare su "Canale" definito nell'ambito esterno? – Kersch