2010-04-06 44 views
6

tôi có một danh sách các bộ, nói rằng,Matching và xóa các mục trong danh sách các hàng

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

Có một hàm built-in (hoặc tôi có thể sử dụng một sự kết hợp của BIFs) để xóa tất cả các bộ phù hợp với {x, _, y} , như đối sánh và xóa dựa trên cụm từ đầu tiên và thứ ba trong bộ dữ liệu, bỏ qua giây thứ hai?

Trả lời

13

Chức năng lists:filter/1 khớp với nhu cầu của bạn, ví dụ:

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

Bạn cũng có thể sử dụng tính năng hiểu danh sách, giống như kết hợp danh sách: bản đồ/2 và danh sách: bộ lọc/2.

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

Nếu vị ngữ của bạn ngược lại, bạn chỉ muốn viết {x, _, y} bạn có thể viết như sau, vì trình tạo sẽ lọc ra những mẫu không phù hợp với mẫu.

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

Tôi đã theo dõi cách bạn sử dụng danh sách: lọc ở trên nhưng nếu tôi muốn làm điều đó với biến số không hoạt động. Như thế này: F = vui vẻ ({_, _ Kênh}) -> true; (_) -> false end, ClientsOnChannel = lists: filter (F(), NewServerState # server_st.client_channel), Có vẻ như Channel được định nghĩa trong phạm vi F. Làm cách nào để làm cho bộ lọc được lọc trên "Kênh" được xác định trong phạm vi bên ngoài? – Kersch

Các vấn đề liên quan