рубиновые множественные наборы петель, но с ограниченным количеством строк в наборе - PullRequest
1 голос
/ 07 июня 2011

Ладно, так что на этот раз я создаю файл CSV с помощью ruby. Внешний цикл будет работать до длины num_of_loops, но он выполняется для всего набора, а не до указанной строки. Я хочу изменить первый столбец файла CSV на новое имя для каждой строки.

Если я сделаю это:

class_days = %w[Wednesday Thursday Friday]

num_of_loops = (num_of_loops / class_days.size).ceil

num_of_loops.times { 
   ["Wednesday","Thursday","Friday"].each do |x|
      data[0] = x
      data[4] = classname()

      # Write all to file
      #
      csv << data
   end
}

Тогда цикл будет выполняться только 3 раза для запроса 5 строк.

Мне бы хотелось, чтобы он запустил все 5 рядов так, чтобы вместо остановки в среду / четверг / пятницу он перешел в среду / четверг / пятницу / среду / четверг.

1 Ответ

1 голос
/ 07 июня 2011
class_days = %w[Wednesday Thursday Friday]
num_of_loops.times do |i|
  data[0] = class_days[i % class_days.size]
  data[4] = classname
  csv << data
end

Интересная часть здесь:

  class_days[i % class_days.size]

Нам нужен индекс в class_days, который находится между 0 и class_days.size - 1.Мы можем получить это с помощью оператора% ( modulo ).Этот оператор возвращает остаток после деления i на class_days.size.Эта таблица показывает, как это работает:

i    i % 3
0      0
1      1
2      2
3      0
4      1
5      2
   ... 

Другая ключевая часть заключается в том, что метод times дает индексы, начинающиеся с 0.

...