Условное суммирование через инъекцию - PullRequest
4 голосов
/ 04 октября 2009

Как получить индекс товара в:

my_array.inject {|rs,item| rs += item}

Мне нужно суммировать все, кроме i-го элемента.

Ответы [ 4 ]

4 голосов
/ 04 октября 2009

Просто подведите итог по индексам.

(0...a.size).inject(0) { |sum, index| if index != (i - 1) then sum + my_array[i] else sum }
3 голосов
/ 04 октября 2009

Вы должны написать свой собственный (даже в Ruby 1.9, поскольку inject не возвращает итератор).

module Enumerable
  def inject_with_index(injected)
    each_with_index {|value, index| injected = yield(injected, value, index)}
    injected
  end
end

Редактировать: если вы переключите inject и each_with_index вокруг (благодаря комментатору!), Вы можете сделать это без нового метода:

["a", "b", "c"].each_with_index.inject("") do |result, (value, index)|
  index != 1 ? result + value : result
end

Убедитесь, что вы вернули просто result, если хотите исключить значение. Это также относится к первому способу.

2 голосов
/ 04 октября 2009

Вы могли бы сначала взять предмет, который вам не нужен:

my_array.values_at(0...i,(i+1)..-1).inject {|rs,item| rs += item}
2 голосов
/ 04 октября 2009

использовать index метод массива:

>> arr = ['a','b', 'c','a']
=> ["a", "b", "c", "a"]
>> arr.index('a')
=> 0
>> arr.index('b')
=> 1
...