限制一个数字并在一定范围内旋转它

时间:2012-06-07 08:02:06

标签: ruby range rotation

是否有更多Ruby-ish和更清晰的方法来让一个数字在一个范围内运作。如果它达到上限,则下一个数字应该再次为1。常见于algorythms,例如迫使第16和28个月成为4月(16-12 = 4)。

案例:我有十二张图片和N个问题。每个问题都会得到下一张图像,如果所有图像都被“使用”,它应该在图像1处重新开始。

def image_rotation(number) {
   uplim = 12

   return number if number <= uplim
   return image_rotation(number - uplim) if number > uplim
}

questions.each_with_index do |q,i|
  img = File::join("images", "image-#{image_rotation(i+1)}.jpg")
end

注意:我不熟悉这个(某种)问题的术语,所以搜索stackoverflow并没有给我任何结果或提示;但我不敢相信这个问题不是重复的。请指出一个关键字,回答/复制或随意回答:)

和单线的奖励点。我需要在ERB文件中使用它,所以如果我能保持代码干净,清晰和简单,那么我更愿意完全解决它。

2 个答案:

答案 0 :(得分:2)

使用modulo (%)

def image_rotation(number) do
   upper_limit = 12
   number % upper_limit
end

image_rotation(12) #=> 12
image_rotation(13) #=> 1

如果那是你的所有方法,你可以这样做:

i % 12

答案 1 :(得分:1)

关键字是模数; ruby方法是modulo,其简写等价为%

16 % 12 #=> 4
28 % 12 #=> 4