配列(リスト)の要素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)