【Ruby】範囲オブジェクト(Range)について詳しく解説します

Ruby

範囲オブジェクト(Range)とは

RubyのRangeオブジェクトとは、その名の通り範囲を表すためのオブジェクトです。

Rangeオブジェクトの値には、

  • 数値
  • 文字列
  • オブジェクト

が使用できます。

使い方としては、以下のように「..」「…」を使います。

範囲開始値..範囲終了値
範囲開始値...範囲終了値

「..」の場合は、範囲終了値を含みますが、「…」の場合は含みません。

Rangeを使うことで、コードに柔軟性を持たせ、コードのサイズを小さくすることができます。

具体的な使用例

以下はrangeを使用したシンプルなコード例です。

range1 = (1 .. 5).to_a
puts "#{range1}"

range2 = (1 ... 5).to_a
puts "#{range2}"


# 出力結果
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4]

シーケンスとしての範囲オブジェクト

Rubyで範囲を定義し、シーケンスの連続した値を生成します。

range = 1..5   

puts range.include?(3)

num = range.max   
puts "最大値 = #{num}"   
 
num = range.min   
puts "最小値 = #{num}"   
    
range.each do |num|   
   puts "繰り返し#{num}"   
end  

# 出力結果
# true
# 最大値 = 5
# 最小値 = 1
# 繰り返し1
# 繰り返し2
# 繰り返し3
# 繰り返し4
# 繰り返し5

条件で使う範囲オブジェクト

ループにおける条件式で使えます。

num = 333  
    
result = case num   
   when 100..200 then "num = 100 ~ 200"   
   when 200..300 then "num = 200 ~ 300"
   when 300..400 then "num = 300 ~ 400" 
   when 400..499 then "num = 400 ~ 499" 
         
   else "500以上"   
end   
    
puts result   

# 出力結果
# num = 300 ~ 400

インターバルとしての範囲オブジェクト

与えられた値が区間内に収まっているかどうかをチェックする場合に使用できます。

if (('A'..'Z') === 'T')
   puts "TはAからZの中にあります。"
end
  
if ((1..100) === 33)
  puts "33は1から100の間にあります。"
end

# 出力結果
# TはAからZの中にあります。
# 33は1から100の間にあります。

reverseメソッド

puts (5..1).to_a

このように、範囲オブジェクトを逆順で記述しても、何も出力されません。

なので、逆順に表示したい場合はreverseメソッドを使ってあげましょう

puts (1..5).to_a.reverse

# 出力結果
# 5
# 4
# 3
# 2
# 1
タイトルとURLをコピーしました