Вопрос

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

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

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

Это было полезно?

Решение

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

(0...a.size).inject(0) { |sum, index| if index != (i - 1) then sum + my_array[i] else sum }

Другие советы

Вам пришлось бы написать свой собственный (даже в 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 если вы хотите исключить это значение.Это также относится к первому способу.

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

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

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

my_array.values_at(0...i,(i+1)..-1).inject {|rs,item| rs += item}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top