Engineering

Jan 24, 2017

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

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

以上!!

関連記事

記事検索

気になるサイト内の記事を検索する

プロフィール

バンクーバー在住のフルスタックエンジニアです。React, Ruby on Rails, Go などでお仕事しています。職場がトロントなので日本、トロント、バンクーバーの三つの時天空を操って生活しています。

プロモーション