3

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

[[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 只需要一个向量列表,所以我需要展平旋转的行。

4

3 回答 3

2

Mapcat 对于每个元素都可以扩展为 0 个或多个输出元素的映射很有用,如下所示:

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

虽然我不确定是否(vector? (first %))对您的数据进行了充分的测试。

于 2013-04-18T16:32:41.617 回答
0

使用树序列的另一种方法:

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

我在这里伸展以使用树序列。有更多经验的人会评论是否有更好的方法只返回孩子而不是使用有效的过滤器(不是分支?)

于 2013-04-18T17:14:48.437 回答
0

Clojure:半展平嵌套序列回答了您的问题,但我不想将此问题标记为该问题的重复,因为您实际上问的是与他不同的问题;我想知道是否可以将他的答案移到这里。

于 2013-04-19T21:30:04.873 回答