扁平化
从集合中移除嵌套
Flatten 从集合中移除嵌套。
ruby…
[[1,2, [3,4], 5], 6, [7,8]].flatten # => [1, 2, 3, 4, 5, 6, 7, 8]
clojure…
(flatten [[1 2 [3 4] 5] 6 [7 8]]) ;; => (1 2 3 4 5 6 7 8)
完全扁平化会移除所有嵌套级别。某些版本允许您使用参数移除有限的嵌套深度
ruby…[[1,2, [3,4], 5], 6, [7,8]].flatten(1) # => [1, 2, [3, 4], 5, 6, 7, 8]
在映射之后移除一层嵌套非常常见。如此常见,以至于您经常会看到运算符 flat-map 来执行此组合操作。
如果您需要单层扁平化,可以使用 flat-map 来实现。
clojure…(defn flatten-1 [c] (mapcat #(if (coll? %) % [%]) c)) (flatten-1 [[1 2 [3 4] 5] 6 [7 8]]) ;; => (1 2 [3 4] 5 6 7 8)