0

是否有一种更 Ruby-ish 和更清洁的方法来让数字在一个范围内运行。如果达到上限,则下一个数字应再次为 1。经常出现在算法中,例如将第 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 文件中使用它,所以如果我可以保持代码干净、清晰和简单,那么我更愿意在那里完全解决它。

4

2 回答 2

2

使用模 ( %)

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

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

但是,如果这就是您的方法所做的全部,您可以这样做:

i % 12
于 2012-06-07T08:07:30.620 回答
1

关键字是模数;ruby 方法是取的,它的简写形式是%

16 % 12 #=> 4
28 % 12 #=> 4
于 2012-06-07T08:07:01.120 回答