【Ruby】Rubyのループ ( while, times ,for , each , step, upto などなど)

2017年12月22日

Rubyのループって便利ですよね!!

timesとか簡単に回数指定してかけるし、
日付の配列を作ってループさせたりできるし。

というわけでRubyのループの構文に絞って紹介していきます。

 

While 文

while文。
条件式がTrueである限りループし続けます。
ある一定の条件で抜けたい場合は、breakを挿入します。

idx = 0
while idx < 2 do
  pp idx
end

 

Times 文

Times文。
指定した回数だけ処理を繰り返す事ができます。
下に紹介した例ではidxは 0,1,2,3・・・・108となります。

108.times do |idx|
pp "ボーン"
end

 

for 文

for文。
指定した回数だけ処理を繰り返す事ができます。
下に紹介した例ではidxは a,b,c~zとなります。
う〜ん便利。これでアルファベットを覚えずにすみますね。

for alphabet in 'a'..'z' do
  printf "#{alphabet}\n"
end

 

each 文

いわゆるforeach文ですね。

array = [ "I", "Have" , "A" , "Pen!!!" ]
array.each do | val |
  p array
end

ハッシュについて使ってあげると
添え字も取得できます。

h = {
 "セ・リーグ" => [ "巨人", "阪神", "中日" , "ヤクルト" , "広島","横浜" ],
 "パ・リーグ" => [ "ソフトバンク", "ロッテ", "日ハム" , "オリックス" , "西武","楽天" ]
 }
h.each do | key , val |
  p key 
  p val
end
$ruby test.rb
"セ・リーグ"
["巨人", "阪神", "中日", "ヤクルト", "広島", "横浜"]
"パ・リーグ"
["巨人", "阪神", "中日", "ヤクルト", "広島", "横浜"]

これは大分使います!!

 

step , upto , downto

upto は以下のように書くと20~30まで実行というようになります。

20.upto(30) do |idx|
   p idx
end

downto というのもある

20.upto(30) do |idx|
   p idx
end

さらに極め付けはstepです。
1から100までは2つずつカウントしてくれます。

1.step(100, 2) do |odd|
   p odd
end

 

おまけ

個人的にすごいなと思うのは
日付、時刻のカウントですかね。

例) 1~3月の日付を全て表示

require "date"
jan = Date.parse("2017/1/1")
march_end = Date.parse("2017/3/31")
(jan..march_end).each do | day |
	  p day.strftime("%Y/%m/%d")
end

例) 1日を30分単位で出力

require "time"
first = Time.parse("2017/1/1 00:00:00")
last = Time.parse("2017/1/1  23:59:59")

(first.to_i..last.to_i).step( 30 * 60  ) do | t | 
          p Time.at(t)
end

以上!!