前置き
Rubyの反復処理についてまとめる。
eachメソッド (配列・ハッシュ)
Rubyでは最も使う反復処理のメソッド。配列・ハッシュに対して便利。
fruits = ["apple", "banana", "grape"]
fruits.each{ |fruit| puts fruit }
配列fruitsの要素を、インデックスの若い順から1つずつ取り出して、引数fruitに入れて{}内の処理を実行する。処理が一行だけなので、{}を使っているが、
numbers = [1, 2, 3, 4, 5]
sum = 0
numbers.each do |number|
if number % 2 == 0
sum += number / 2
else
sum += number
end
end
sum #=> 12
複数行の場合は、do endを使うと書きやすい。
timesメソッド(繰り返す回数)
繰り返す回数が決まっている処理に対して便利。
sum = 0
10.times { |n| sum += n }
sum #=> 45
upto・downtoメソッド(数値)
初めと終わりの数値が決まっているときに便利。
15.upto(20) do |age|
if age < 18
puts "#{age}歳では選挙権はありません"
else
puts "#{age}歳は18歳以上なので選挙権があります"
end
end
uptoは数値を増やす方向に処理を繰り返す。
指定した最初の数値15 から最後の数値20 まで処理を実行。
20.downto(15) do |age|
if age < 18
puts "#{age}歳では選挙権はありません"
else
puts "#{age}歳は18歳以上なので選挙権があります"
end
end
downtoは数値を減らす方向に処理を繰り返す。
指定した最初の数値20 から最後の数値15 まで処理を実行。
while文・until文(終了条件)
終了条件が決まっているときに便利
array = (1..100).to_a
sum = 0
i = 0
while sum < 1000
sum += array[i]
i += 1
end
sum #=> 1035
whileの横にある条件が真の間、while endの間の処理を繰り返す。
上のコードでは、合計値sumが1000を超えたときに処理を終了する。
until文は、while文とは逆で、条件が偽のときに処理を繰り返すので、
array = (1..100).to_a
sum = 0
i = 0
until sum >= 1000
sum += array[i]
i += 1
end
sum #=> 1035
上のコードは、while.rbと同じ意味になる。
loopメソッド(無限ループ)
while trueでも無限ループを作れるが、loopメソッドを使うとよりシンプルに作れる。
numbers = [1, 2, 3, 4, 5, 6, 7]
loop do
n = numbers.sample
puts n
break if n == 7
end
まとめ
繰り返し処理に使うメソッド・構文は、ケースにあったものを使うと便利。
参考文献
プロを目指す人のためのRuby入門
伊藤淳一 [著]