Как получить индекс элемента в:Условное подведению через Inject
my_array.inject {|rs,item| rs += item}
мне нужно суммировать все, кроме г-го элемента.
Как получить индекс элемента в:Условное подведению через Inject
my_array.inject {|rs,item| rs += item}
мне нужно суммировать все, кроме г-го элемента.
Просто суммировать по индексам.
(0...a.size).inject(0) { |sum, index| if index != (i - 1) then sum + my_array[i] else sum }
использование index
метод массива:
>> arr = ['a','b', 'c','a']
=> ["a", "b", "c", "a"]
>> arr.index('a')
=> 0
>> arr.index('b')
=> 1
Вам нужно будет написать свой собственный (даже в Ruby 1.9, так как инъекция не возвращает итератор).
module Enumerable
def inject_with_index(injected)
each_with_index {|value, index| injected = yield(injected, value, index)}
injected
end
end
Edit: Если вы переключитесь inject
и each_with_index
вокруг (! Благодаря комментатора), вы можете сделать это без нового метода:
["a", "b", "c"].each_with_index.inject("") do |result, (value, index)|
index != 1 ? result + value : result
end
Убедитесь в том, чтобы вернуться только result
, если вы хотите, чтобы исключить Значение. Это также относится к первому методу.
Вы можете вынуть деталь вы не хотите первый:
my_array.values_at(0...i,(i+1)..-1).inject {|rs,item| rs += item}
Лучшее решение, я думаю – Dario
Спасибо, но, похоже, что есть более простой способ: my_arr.inject {| Р.С., пункт | rs + = item, если my_arr.index (item)! = 0} – gmile
Но более простой способ, который вы предположили, опасен с повторяющимися элементами и гораздо менее результативным - для поиска элемента требуется O (n). – Dario