2010-04-06 16 views
6

मैं tuples, कहते हैं की एक सूची है,मिलान और हटाने आइटम

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

वहाँ एक अंतर्निहित समारोह है (या मैं BIFS के संयोजन का उपयोग कर सकते हैं) {x, _, y} मिलान सभी tuples को हटाने के लिए , जैसा कि मैच में और टुपल्स में पहले और तीसरे कार्यकाल के आधार पर हटाया गया है, दूसरे को अनदेखा कर रहा है?

उत्तर

13

lists: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, _, वाई} आप निम्नलिखित के रूप में यह लिख सकता है क्योंकि जनरेटर को फ़िल्टर कर देगा पैटर्न मिलान उन नहीं चाहता था।

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

मैंने सुझाव दिया कि आपने सूचियों का उपयोग कैसे किया: ऊपर फ़िल्टर करें लेकिन यदि मैं एक चर के साथ ऐसा करना चाहता हूं तो यह काम नहीं करता है। इस तरह: एफ = मज़ा ({_, _ चैनल}) -> सत्य; (_) -> झूठा अंत, ClientsOnChannel = सूचियां: फ़िल्टर (एफ(), न्यूसेवरस्टेट # server_st.client_channel), ऐसा लगता है जैसे चैनल को एफ स्कोप में परिभाषित किया जाता है। मैं इसे बाहरी दायरे में परिभाषित "चैनल" पर फ़िल्टर करने के लिए कैसे प्राप्त करूं? – Kersch

संबंधित मुद्दे