配列(リスト)の先頭から要素の畳み込みをするには (array_reduce / foldLeft / inject / reduce / reduceLeft)
Scala 2015/03/22
Signature:
def Seq[A]#foldLeft[B](initial: B)(f: (B, A) => B): B
def Seq[A]#reduceLeft[B >: A](f: (B, A) => B): B
例
List(10, 20, 30).foldLeft(0)(f)
List(10, 20, 30).reduceLeft(f)
上の例はそれぞれ
f(f(f(0, 10), 20), 30)
f(f(10, 20), 30)
になる。
これらはTraversableOnce
のメソッドなので、Set
やMap
でも使える。
PHP 2015/01/15
array_reduce
関数を使う。
$arr = array(10, 20, 30, 40, 50);
$sum = array_reduce($arr, function($result, $elem) { return $result + $elem; }, 0);
echo $sum;
// => 150
array_reduce
関数 | PHP Manual
http://php.net/manual/ja/function.array-reduce.php
Ruby / JRuby 2015/01/15
Enumerable#inject
または Enumerable#reduce
メソッドを使う。2つのメソッドはまったく同じ。
arr = [1, 2, 3]
p arr.inject(:+) # => 6
p arr.inject {|i, x| i + x} # => 6
p arr.inject(0) {|i, x| i + x} # => 6
inject
またはreduce
に初期値を与えないと、1つ目の要素が初期値であるかのような動作をする。配列の要素が1つもなくて初期値も与えないと、nil
が返される。
Enumerable#recude
, Enumerable#inject
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/inject.html