此頁面描述集合管線模式中的操作。如需更多背景資訊,請閱讀

扁平化

移除集合中的巢狀結構

扁平化會移除集合中的巢狀結構。

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]

在映射後移除單一層級的巢狀結構很常見。很常見,您經常會看到運算子 扁平映射 來執行此組合。

如果您需要單一層級的扁平化,您可以使用 扁平映射 來達成。

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)