在Clojure中将嵌套列表转换为集合列表的方法是什么?

7

有一个由等长列表组成的列表,例如:

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

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

[#{"A" "H"} #{"B" "C" "M"}]
3个回答

17
(map set (apply map vector d))
"(apply map vector)"被其他类似于Python的语言称为"zip"。它对d的每个元素的第一个项目、第二个项目等调用vector,然后我们在这些集合中每个都调用set

不错 - 对于一个非常整洁的解决方案加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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接