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

将集合转换为向量将在Clojure中生成嵌套向量的向量,clojure,clojurescript,Clojure,Clojurescript,我是clojure的新手,想知道为什么当我将集合转换为向量时,结果向量是嵌套向量的向量 例如,我有一个类型为Lazy Seq的集合 ({:fox:corn}{:boat}}) 这是跑步的结果 (地图(disj(set%):鹅:你)[:狐狸:鹅:玉米:你][:船][]) 我想在集合中循环,得到向量 [:fox:corn][:boat][] 但我能想到的最好的代码是 (对于[i非vec](conj(空[])(vec i))) 其中“non-vec”是上述惰性序列 但是,运行该命令会产生以下结

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

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

({:fox:corn}{:boat}})
这是跑步的结果

(地图(disj(set%):鹅:你)[:狐狸:鹅:玉米:你][:船][])
我想在集合中循环,得到向量

[:fox:corn][:boat][]
但我能想到的最好的代码是

(对于[i非vec](conj(空[])(vec i)))
其中“non-vec”是上述惰性序列

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

([:fox:corn][:boat][[]
也属于惰性序列类型

我想知道

1:如何获得预期的向量

2:为什么输出是惰性序列类型,而我将其连接到一个空向量

问题一: 我想你在找我

(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] []])

感谢您提供这段代码。工作起来很有魅力。