配列(リスト)の先頭から要素の畳み込みをするには (array_reduce / foldLeft / inject / reduce / reduceLeft)

Scala

Signature:

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のメソッドなので、SetMapでも使える。

PHP

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

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

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク