将集合转换为向量会在 Clojure 中生成嵌套向量的向量

Converting a set to a vector results in a vector of nested vectors in Clojure

我是 clojure 的新手,想知道为什么当我将集合转换为向量时,生成的向量是嵌套向量的向量。

例如,我有这个 Lazy Seq 类型的集合

(#{:fox :corn} #{:boat} #{})

这是 运行、

的结果
(map #(disj (set %) :goose :you) [[:fox :goose :corn :you] [:boat] []])

我想遍历集合并获取向量

[[:fox :corn] [:boat] []]

但我能想到的最好的代码是

(for [i non-vec] (conj (empty []) (vec i)))

其中 'non-vec' 是上面的惰性序列。

但是 运行 命令产生以下结果

([[:fox :corn]] [[:boat]] [[]])

也是惰性序列类型

我想知道

1:如何得到预期的向量

2: 为什么输出是 Lazy Sequence 类型,而我将它连接到一个空向量

问题一: 我认为您正在寻找

(mapv vec '(#{:fox :corn} #{:boat} #{})) ;; [[:fox :corn] [:boat] []]

问题二: 我认为那是因为 for 产生了一个惰性序列

如果你能用列表来做:

(map #(remove #{:goose :you} %) [[:fox :goose :corn :you] [:boat] []])

如果没有:

(mapv #(into [] (remove #{:goose :you} %)) [[:fox :goose :corn :you] [:boat] []])