配列(リスト)の配列を配列に平坦化するには (flatten)

配列の要素もまた配列や集合だった場合にそれを平坦化する方法。

関連

Scala

Signature:

処理結果のSeqを返し、自身は変更しない。ASeq[B], Set[B] など B のコレクションである必要がある。Rubyの arr.flatten(1) と同じ動き。

Set#flatten と使い方が同じ。

val lst = List(List(3, 4, 5), List(4, 6, 8));
println(lst.flatten);
// => List(3, 4, 5, 4, 6, 8)

// 以下と同じになる
println(lst.flatMap(e => e));
// => List(3, 4, 5, 4, 6, 8)

PHP

これをする標準の関数はなさそう。

Python

これをする標準の関数はなさそう。

リストの内包表記でforを入れ子にすればできる。

lst = [[1, 2, 3], [4, 5, 6]]
lst2 = [e2 for e1 in lst for e2 in e1]
print(lst2)
# => [1, 2, 3, 4, 5, 6]

Ruby / JRuby

Array#flatten を使う。引数なしでこのメソッドを呼び出すと再帰的にすべての要素を平坦化する。引数に整数を与えると、その数のレベルだけ平坦にする。

arr = [1, [2, [3, 4]]]
p arr.flatten(1) #=> [1, 2, [3, 4]]
p arr.flatten(2) # => [1, 2, 3, 4]
p arr.flatten    # => [1, 2, 3, 4]

Array#flatten! は配列自身を破壊的に変更する。

Array#flatten, Array#flatten! | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/flatten.html

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク