Ruby - каждое начальное смещение

Как установить начальное смещение для each цикла в рубине? Я хочу, чтобы цикл начинался с a[3] вместо a[0]. Как это установить?

a = [ab, cd, ef, gh, hi, jk]

a.each do |i|
#some stuff
end

Ответ 1

Другая, возможно более прямая и читаемая возможность заключается в использовании Array#drop:

a.drop(3).each do |i|
  # do something with item i
end

Теперь это действительно сияет, если оно сочетается с другими методами, унаследованными от Enumerable, поэтому есть вероятность, что вам будет лучше альтернатива вашему императиву each цикла. Предположим, вы хотите отфильтровать извлеченный фрагмент и затем преобразовать его:

a = [0,1,2,3,4,5,6,7]
a.drop(3).select(&:even?).map { |x| x * 2 }
# => [8, 12]

Или скажите, что вы хотите распечатать список всех значений:

a = ["1", "2", "3", "4", "5"]
puts a.drop(3).join("\n")

Вывод:

4
5

Эти функции, унаследованные от функционального программирования, делают Ruby настолько сильным :)

Ответ 2

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

a[3..-1].each do |i|
  #some stuff
end

Ответ 3

Это поможет вам

a[3..-1].each do |i|
  #your logic
end

Ответ 4

Большинство рубистов забывают о добром старце для цикла:

n = 3
for i in n...a.size
  puts a[i]
end