将此列表变成集合的向量

时间:2019-01-04 20:57:59

标签: clojure

有人知道如何将向量列表转换为集合向量吗?

([#{2}] [#{1 2 3 4}] [#{5}] [#{3}])

结果应为

[#{2} #{1 2 3 4} #{5} #{3}]

3 个答案:

答案 0 :(得分:4)

完成此操作的多种方法。这取决于您的需要使用哪种方法:

(def data '([#{2}] [#{1 2 3 4}] [#{5}] [#{3}]))

;; If you have a list of single element lists:
(mapv first data) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you have a list of multiple element lists:
(vec (apply concat data)) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you also want to handle multiple levels of nesting:
(vec (flatten data)) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

;; If you ..;
(transduce (map first) conj data) ;; => [#{2} #{1 2 3 4} #{5} #{3}]

答案 1 :(得分:4)

我没有看到建议的一种方式是使用intocat

(def data '([#{2}] [#{1 2 3 4}] [#{5}] [#{3}]))
(into [] cat data) => [#{2} #{1 4 3 2} #{5} #{3}]

答案 2 :(得分:1)

请注意,这些集合只是向量的元素

所以,一种方法是在向量​​列表上进行迭代(map),并选择每个向量(即集合)的first元素。这将建立这些集合的列表,然后可以将它们转换为向量:

user=> (vec (map first '([#{2}] [#{1 4 3 2}] [#{5}] [#{3}])))
[#{2} #{1 4 3 2} #{5} #{3}]