配列(リスト)の配列を配列に平坦化するには (flatten) 2015/03/25
配列の要素もまた配列や集合だった場合にそれを平坦化する方法。
関連
Scala 2014/10/29
Signature:
処理結果のSeq
を返し、自身は変更しない。A
は Seq[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 2014/01/13
これをする標準の関数はなさそう。
Python 2014/04/12
これをする標準の関数はなさそう。
リストの内包表記で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 2015/01/04
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