配列(リスト)の要素1つずつに関数を適用して結果の配列を連結した新しい配列を作るには (flatMap) 2013/10/22
Scala 2015/01/12
Signature:
例
val lst1 = List(1, 2, 3);
val result = lst1.flatMap(0 until _);
println(result);
// => List(0, 0, 1, 0, 1, 2)
flatMap
メソッドは結果を新しいリストで返し、自身は変更しない。
Python 2014/04/12
リストの内包表記でfor
を入れ子にして内側のfor
の中に関数を書けばできる。
def f(i):
return range(i)
lst = [1, 2, 3]
lst2 = [e2 for e1 in lst for e2 in f(e1)]
print(lst2)
# => [0, 0, 1, 0, 1, 2]
Ruby / JRuby 2014/01/04
Enumerable#flat_map
を使う。
Array
はEnumerable
をインクルードしているので、配列でもEnumerable
のメソッドを使える。
または Enumerable#map
と Array#flatten
を組み合わせても同じことはできる。
arr = [1, 2, 3]
p arr.flat_map { |i| (0..i).to_a }
# => [0, 1, 0, 1, 2, 0, 1, 2, 3]
p arr.map { |i| (0..i).to_a }.flatten(1)
# => [0, 1, 0, 1, 2, 0, 1, 2, 3]
Enumerable#flat_map
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/collect_concat.html
Enumerable#map
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/collect.html
Array#flatten
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/flatten.html
Enumerable#flat_map
はRuby 1.9かららしい。
Perl 2013/09/10
簡単にこれをやる関数はないので、例えば以下のように処理する。
my @srcList = ...;
my @result = ();
foreach my $elem (@srcList) {
my @newElements = f($elem);
foreach my $newElement (@newElements) {
push(@result, $newElement);
}
}