繰り返し処理 Each for
配列やハッシュ.each do |変数| #繰り返し実行したい処理 end
例1
#1:配列 numbersを作成(1,2,3,4,5) numbers = [1, 2, 3, 4, 5] #2:配列の要素を一つずつ取り出して実行 numbers.each do |number| puts number end 別解1 numbers.each {|number| puts number } #一行でもかける numbers.each {|number| puts number }
↑配列が入っている要素は複数形||の中の変数は
単数で書くことが多いらしい
配列 colors を作成
‘red’, ’green’ ’blue’
配列の要素を一つずつ取り出して出力
colors = ['red', 'green', 'blue'] colors.each do |color| puts color end red green blue => ["red", "green", "blue"]
#繰返処理 for構文 for 変数 in 配列やハッシュ do #繰り返し実行したい処理 end
1:配列 numbersを作成(1,2,3,4,5)
2:配列の要素を一つずつ取り出して実行
numbers = [1, 2, 3, 4, 5] for number in numbers do puts number end
forは原則使わないらしい
each (ハッシュ利用)
1:ハッシュで生徒ごとの点数scoresを用意
{luke: 100, ben: 90, alan: 70 }
配列の要素を一つずつ取り出して出力
scores = {luke: 100, ben: 90, alan: 70} scores.each do |k, v| puts v end #出力されるもの 100 90 70
両方取り出したいとき↓
scores = {luke: 100, ben: 90, alan: 70} scores.each do |k, v| puts "#{k}, #{v}" end #出力されるもの luke, 100 ben, 90 alan, 70
80点以上を取り出したいとき↓ifをeachに追加
scores = {luke: 100, ben: 90, alan: 70} scores.each do |k, v| if v >= 80 puts "#{k}, #{v}" end end luke, 100 ben, 90
繰り返し処理 times
繰り返し回数.times do |i| 繰り返し実行したい処理 end |i|は省略可能
5.times do puts 'Hello' end Hello Hello Hello Hello Hello
ダブルクオートで囲んだとき
5.times do |i| puts "#{i}: Hello" end 0: Hello 1: Hello 2: Hello 3: Hello 4: Hello 上も下も同じ意味 5.times { |i| puts "#{i}: Hello" }
繰り返し処理(while)
while 条件式 do 繰り返し実行したい処理 end
数字を0から9まで、10個出力するプログラム。whileを使って書く
i = 0 while i < 10 puts "#{i}:hello" i += 1 #i = i + 1 end #出力されるもの 0:hello 1:hello 2:hello 3:hello 4:hello 5:hello 6:hello 7:hello 8:hello 9:hello
無限ループが起きることがあるので気をつけよう
uptoとdownto
開始値.upto(終了値){繰り返し実行したい処理}
10.upto(14) {|n| puts n } 14.downto(10) {|n| puts n } 10 11 12 13 14 14 13 12 11 10
繰り返し処理step
開始式.step(上限値,一度に増減する大きさ){}
1.step(10, 2) { |n| puts n } 1 3 5 7 9
減らすときはマイナスで 10.step(1, -2) { |n| puts n } 10 8 6 4 2
繰り返し処理(loop)
loop do 繰り返し実行したい処理 end
loopメソッドを使って、変数の値を0から1ずつ増やして出力
i = 0 loop do puts i i += 1 #breakがないと無限ループに突入するので注意! break if i == 10 end 0 1 2 3 4 5 6 7 8 9
whileの場合
n = 0 while true puts ncf n += 1 end
応用)配列[1,2,3,4,5,]の値が、奇数の場合のみ、画面に出力する処理。
eachとnextを利用
numbers = [1, 2, 3, 4, 5] numbers.each do |n| next if n % 2 == 0 #もしnが偶数だったらループをスキップするという意味 #上と下は同じ意味だで next if n.even? #奇数の時はodd next if n.odd? puts n end #出力されるもの 1 3 5