有同樣大小的列表的列表,如:將嵌套列表轉換爲Clojure中的集合列表?
(def d [["A" "B"] ["A" "C"] ["H" "M"]])
怎樣纔可以改造成集列表,每一組對上述指標:
[#{"A" "H"} #{"B" "C" "M"}]
有同樣大小的列表的列表,如:將嵌套列表轉換爲Clojure中的集合列表?
(def d [["A" "B"] ["A" "C"] ["H" "M"]])
怎樣纔可以改造成集列表,每一組對上述指標:
[#{"A" "H"} #{"B" "C" "M"}]
(map set (apply map vector d))
「(apply map vector)
」是其他語言(如Python)中所謂的「zip」。它在d
的每個元素的第一項上調用vector
,然後每個元素的第二項等。
然後我們在這些集合的每一個上調用set
。
如果哈希集合允許重複鍵,你可以使用:
(apply map hash-set d)
相反,你可以做醜陋
(apply map (fn [& s] (set s)) d)
我建議如下:
(reduce
(fn [sets vals]
(map conj sets vals))
(map hash-set (first d))
(rest d))
尼斯 - +1一個非常巧妙的解決辦法! – mikera 2011-03-14 21:01:04