0

私にとって、より良い方法は考えられませんでしたが、あると信じています。次のメソッドの実装を行うルビーの方法(意味:エレガントな方法)はありますか?

def total(items)
  sum = 0
  items.each do |item|
    sum += item.value
  end
  sum
end
4

4 に答える 4

3
items.inject(0) { |memo,item| memo + item.value }

初期値を 0 にする必要はないように思えるかもしれませんが、配列が空の場合はこの初期値を返します。

2 番目のアプローチ:

items.map(&:value).inject(0,:+)
于 2012-11-06T06:03:20.280 に答える
3

map値を取得するには、reduce加算を使用して値を取得します。

def total(items)
  items.map(&:value).reduce(:+)
end
于 2012-11-06T06:23:27.507 に答える
2

たとえば、これを行うことができます

items.reduce{|sum, el| sum + el.value} 
于 2012-11-06T06:03:11.610 に答える
1
def total(items)
  items.inject(0) do |total, item|
    total + item.value
  end
end
于 2012-11-06T06:06:23.683 に答える