将嵌套列表转换为Clojure中的集合列表?

时间:2011-03-14 20:26:20

标签: clojure

有一个大小相同的列表列表,例如:

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

如何将其转换为集合列表,每个集合都为上面的索引设置:

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

3 个答案:

答案 0 :(得分:17)

(map set (apply map vector d))

(apply map vector)”是其他语言(如Python)中所谓的“zip”。它在vector的每个元素的第一项上调用d,然后在每个元素的第二项等上调用

然后我们在每个集合上调用set

答案 1 :(得分:4)

如果散列集允许重复键,则可以使用:

(apply map hash-set d)

相反,你可以做丑陋的

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

答案 2 :(得分:1)

我建议如下:

(reduce
  (fn [sets vals]
    (map conj sets vals))
  (map hash-set (first d))
  (rest d))