2011-03-14 20 views
7

एक समान रूप से आकार सूचियों का उदाहरण सूची, बीत रहा है:क्लोजर में सेट की सूची में नेस्टेड सूचियों का परिवर्तन?

(def d [["A" "B"] ["A" "C"] ["H" "M"]]) 

यह कैसे सेट की सूची के रूप में तब्दील किया जा सकता है, इसके बाद के संस्करण अनुक्रमित के लिए प्रत्येक सेट:

[#{"A" "H"} #{"B" "C" "M"}] 

उत्तर

17
(map set (apply map vector d)) 

"(apply map vector)" जिसे पायथन जैसे अन्य भाषाओं में "ज़िप" कहा जाता है। यह के प्रत्येक तत्व के पहले आइटम पर vector पर कॉल करता है, फिर प्रत्येक तत्व का दूसरा आइटम इत्यादि।

फिर हम उन संग्रहों में set पर कॉल करते हैं।

+0

अच्छा - एक बहुत साफ समाधान के लिए +1! – mikera

4

हैश-सेट की अनुमति दी है, तो डुप्लिकेट चाबियाँ, आप इस्तेमाल कर सकते हैं:

(apply map hash-set d) 

बजाय, आप कर सकते हैं भद्दा

(apply map (fn [& s] (set s)) d) 
1

मेरा सुझाव था निम्नलिखित:

(reduce 
    (fn [sets vals] 
    (map conj sets vals)) 
    (map hash-set (first d)) 
    (rest d)) 
संबंधित मुद्दे