好的,所以我这次用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行,而不是在周三/周四/周五停止,而是转到周三/周四/周五/周三/周四。
答案 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开始的索引。