扁平化
移除集合中的巢狀結構
扁平化會移除集合中的巢狀結構。
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)