0

範囲内で数値を操作するための、よりRubyらしくてクリーンな方法はありますか? 上限に達すると、次の数値は再び 1 になります。16 月と 28 月を強制的に 4 月にする (16-12=4) などのアルゴリズムでよく見られます。

ケース: 12 個の画像と 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 メソッドはmoduloであり、その略記は次のとおりです。%

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