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