ruby多循环集,但每组有限的行

时间:2011-06-07 17:39:07

标签: ruby ruby-1.9 nested-loops

好的,所以我这次用ruby构建一个CSV文件。外部循环将运行长度为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 个答案:

答案 0 :(得分:1)

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]

我们需要一个介于0和class_days.size - 1之间的class_days索引。我们可以使用%( modulo )运算符来实现。将i除以class_days.size后,该运算符会产生余数。该表显示了它的工作原理:

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

另一个关键部分是times方法产生从0开始的索引。