配列(リスト)の要素1つずつに関数を適用して新しい配列(リスト)を作るには (array_map / map) 2015/05/02
各プログラミング言語での、配列(リスト)の要素1つずつに関数を適用して新しい配列(リスト)を作る方法。
要素1つずつに関数を適用したいが、副作用が目的で、返り値には興味がない場合はforeachを使う。
関連
Scala 2015/01/10
scala.collection.Seq#map メソッドを使う。
Signature:
def scala.collection.Seq[A]#map[B](f: A => B): Seq[B]
例
val lst = List(10, 20, 30, 40, 50);
println(lst.map(_ * 2));
// => List(20, 40, 60, 80, 100)
PHP 2016/06/21
array_map関数を使う。
array_map(function($elem){
...
return ...;
}, $arr);
array_filter関数と引数の順番が違うので、要注意。
array_map 関数 | PHP Manual
http://php.net/manual/ja/function.array-map.php
ただし、array_map は遅いので、普通に foreach で回しながら新しい配列を作ったほうが速い、という話もある。
PHPで高速オシャレな配列操作を求めて | Qiita
http://qiita.com/Hiraku/items/190443b33ee7a2167ade
Python 2013/10/08
map関数を使う例
lst = [10, 20, 30, 40, 50]
print map((lambda x: x * 2), lst)
# => [20, 40, 60, 80, 100]
リストの内包表記を使う例
lst = [10, 20, 30, 40, 50]
print [x * 2 for x in lst]
# => [20, 40, 60, 80, 100]
map関数では2つ以上の同じ長さのリストを与えることもできる。
lst1 = [10, 20, 30, 40, 50]
lst2 = [1, 2, 3, 4, 5]
print map((lambda x, y: x + y), lst1, lst2)
# => [11, 22, 33, 44, 55]
Ruby / JRuby 2015/01/01
Enumerable#map を使う。ArrayはEnumerableをインクルードしているので、Arrayでも使える。
さらにArrayには Array#map! という配列自身を変更するメソッドもある。
arr = [10, 20, 30, 40, 50]
p arr.map { |i| i * 2 }
# => [20, 40, 60, 80, 100]
p arr
# => [10, 20, 30, 40, 50]
arr.map! { |i| i * 2 } # 配列自身を変更
p arr
# => [20, 40, 60, 80, 100]
Enumerable#collect は Enumerable#map とまったく同じで、
Array#collect! は Array#map! とまったく同じ。
Enumerable#map, Enumerable#collect | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/collect.html
Array#map!, Array#collect! | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/collect=21.html
全然関係ないが、enumerable という単語の読み方は英語では発音記号で書くと /ɪnjúːmərəbl/ らしい。
Perl 2015/04/05
例
my @arr = (1, 2, 3);
my @arr2 = map { $_ * 2; } @arr;
print "@arr2";
# => 2 4 6
map 関数 | perldoc.jp
http://perldoc.jp/func/map
R言語 2013/11/19
A <- c(1, 2, 5)
B <- mapply(function(x) x * 2, A)
# B: 2 4 10
CoffeeScript 2013/04/19
配列の内包表記
(elemを使った式 for elem in arr)