假设我有一个类似的数据结构:
[[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只需要一个向量列表,所以我需要展平已经转动的行。
答案 0 :(得分:2)
Mapcat对于映射,每个元素可以扩展为0个或更多输出元素,如下所示:
(mapcat #(if (vector? (first %)) % [%]) data)
虽然我不确定(vector? (first %))
是否足以对您的数据进行测试。
答案 1 :(得分:0)
使用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。有经验的人会不会评论是否有更好的方法只返回孩子,而不是使用有效的过滤器(不是分支?)
答案 2 :(得分:0)
Clojure: Semi-Flattening a nested Sequence回答了您的问题,但我不想将此问题标记为该问题的副本,因为您确实提出了与他不同的问题;我想知道是否有可能将他的答案移到这里。