此页面描述了集合管道模式中的一个操作。有关更多上下文,请阅读

扁平化

从集合中移除嵌套

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)