将集合转换为向量会在 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] []])
我是 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] []])