a = ['a', 'b', 'c']
a.each_with_index.reject {|el,i| i == 1}.each do |el,i|
# do whatever with the element
puts el
end
ИМХО - лучший способ сделать выбор вместо использования своего собственного явного if
выражения. Я полагаю, однако, что это приведет к примерно той же производительности, что и при использовании if
, возможно, даже немного ниже.
Если после сравнительного анализа, как другие предположили, вы знаете, что время, которое требуется, определенно медленнее, чем то, что вы можете себе позволить, и это - выбор, вызывающий медлительность, то это можно легко изменить, чтобы удалить выбор несколькими способами. :
a = ['a', 'b', 'c']
n = 1
(a.first(n) + a.drop(n + 1)).each do |el|
# do whatever with the element
puts el
end
К сожалению, я считаю, что это также будет медленнее, чем запуск простого if. Я полагаю, что у скорости есть потенциал:
a = ['a', 'b', 'c']
n = 1
((0...n).to_a+((n+1)...a.size).to_a).map{|i| a[i]}.each do |el|
# do whatever with the element
puts el
end
Но опять же есть большая вероятность быть медленнее.
EDIT
Бенчмарк находится в этом гисте . Эти результаты на самом деле меня удивили, отклонение - самый медленный вариант, за которым следуют диапазоны. Самая высокая эффективность после полного удаления элемента - использование first
и drop
для выбора всех элементов вокруг него.
Результаты в процентах, без выбора в качестве базовой линии:
with if 146%
with first and drop 104%
without if 100%
Очевидно, что это сильно зависит от того, что вы делаете с элементами, это было тестирование, вероятно, с самой быстрой операцией, которую может выполнить Ruby. Чем медленнее операция, тем меньше будет разница. Как всегда: Benchmark, Benchmark, Benchmark