🫓

ネストしたシーケンスを1レベルだけ flatten する

2023/11/09に公開

Clojure でネストしたシーケンスを1レベルだけ flatten したい。

3レベルネストした配列

(def three-level-nested-seq
  [[[1 2] [3 4]]
   [[5 6] [7 8]]
   [[9 10] [11 12]]])
;=> [[[[1 2] [3 4]] [[5 6] [7 8]] [[9 10] [11 12]]]]   

flatten は、再帰的にフラット化される

(flatten three-level-nested-seq)
;=> (1 2 3 4 5 6 7 8 9 10 11 12)

flatten-1 のような関数はビルトインでは存在しないので、1レベルだけフラット化したい場合は他の関数を使う

(mapcat identity three-level-nested-seq)
;=> ([1 2] [3 4] [5 6] [7 8] [9 10] [11 12])

(apply concat three-level-nested-seq)
;=> ([1 2] [3 4] [5 6] [7 8] [9 10] [11 12])

個人的には (apply concat x) のほうが分かりやすいかな。

参考:
https://clojuredocs.org/clojure.core/flatten#notes

Discussion