如何在clojure中平铺列表?

如何在clojure中平铺列表?,clojure,Clojure,假设我有这样一个数据结构: [[1 2 3] [4 5 6] [[7 8 9] [10 11 12]]] 最后我想说的是: [[1 2 3] [4 5 6] [7 8 9] [10 11 12]] 是否有自动执行此操作的功能 基本上,我正在将SQL结果集转换为CSV,CSV中有一些行将转换为2行。所以我的map函数在正常情况下返回一个向量,但有时返回一个向量向量。Clojure.data.csv只需要一个向量列表,所以我需要展平已旋转的行 Mapcat用于映射,其中每个元素可以扩展为0个或多

假设我有这样一个数据结构:

[[1 2 3] [4 5 6] [[7 8 9] [10 11 12]]]
最后我想说的是:

[[1 2 3] [4 5 6] [7 8 9] [10 11 12]]
是否有自动执行此操作的功能


基本上,我正在将SQL结果集转换为CSV,CSV中有一些行将转换为2行。所以我的map函数在正常情况下返回一个向量,但有时返回一个向量向量。Clojure.data.csv只需要一个向量列表,所以我需要展平已旋转的行

Mapcat用于映射,其中每个元素可以扩展为0个或多个输出元素,如下所示:

(mapcat #(if (vector? (first %)) % [%]) data)

虽然我不确定
(vector?(first%))
是否足以测试您的数据。

使用tree-seq的不同方法:

(def a [[1 2 3] [4 5 6] [[7 8 9] [10 11 12]]])

(filter (comp not vector? first) 
   (tree-seq (comp vector? first) seq a))

我在这里扩展到使用tree seq。是否有经验丰富的人愿意评论一下,除了使用有效的过滤器(不是分支?)之外,是否有更好的方法只返回孩子们

回答您的问题,但我不想将此问题标记为该问题的重复,因为您问的问题与他问的问题不同;我想知道是否有可能把他的答案移到这里。

不,结果应该产生一个由4个向量组成的向量,你的代码产生3个——你正在合并最后两行数据,而实际上它们应该是分开的。啊,是的。我懂了。给我一个细节,我更喜欢的解决方案总是产生一个向量的向量;然后,单行结果将是单例向量。无论您在执行额外包装过程中损失了多少时间/LOC,您都将能够更简单地为输出处理数据。此外,它感觉更干净、更坚固。只有我的0.02欧元。