LoginSignup
0
0

More than 3 years have passed since last update.

Rubyの繰り返し処理について

Last updated at Posted at 2020-05-06

はじめに

よく使われるRubyの繰り返し処理や、個人的に便利そうだなと思うものをまとめていきます。

Rubyの繰り返し処理

each文

繰り返しの基本のeach文です。
Rubyでは、for文を使わずにこのeach文を使うことが多いです。
do ~ end までがブロックと呼ばれ、要素をどう扱うかが記述されます。

numbers = [1,2,3,4]
sum = 0
numbers.each do |n|
  sum += n
end
sum #=>10

do ... end の省略

do ... endの代わりに { } で囲むことでもブロックを作ることが可能です。
1行でコンパクトに書きたいときなどに使える方法です。

numbers = [1,2,3,4]
sum = 0
numbers.each { |n| sum += n }
sum #=>10

mapメソッド

各要素に対して、評価した結果を新しい配列にして返すことが出来ます。

numbers = [1,2,3,4]
new_numbers = numbers.map { |n| n*10 }
new_numbers #=> [10, 20, 30, 40]

each_with_indexメソッド

each_with_indexを使うと、添字も取得可能です。
繰り返しもしつつ、添字も取得したいときに便利なメソッドです。

members = ["ichiro", "jiro", "saburo"]
members.each_with_index { |member, i| puts "#{i}: #{member}"}
#=> 0: ichiro
#   1: jiro
#   2: saburo

with_indexメソッド

mapメソッドと組み合わせて使うことで、mapメソッドを繰り返し処理をしつつ
添字も同時に取得することが出来ます。

members = ["ichiro", "jiro", "saburo"]
new_members = members.map.with_index { |member, i| "#{i}: #{member}" }
new_members #=> ["0: ichiro", "1: jiro", "2: saburo"]

添字を0以外から開始させる

each_with_indexやwith_indexで以外の数値で開始したいとき
メソッドに引数を渡すことで、指定することが可能です。

members = ["ichiro", "jiro", "saburo"]
new_members = members.map.with_index(1) { |member, i| "#{i}: #{member}" }
new_members #=> ["1: ichiro", "2: jiro", "3: saburo"]

ブロックにメソッドを追加出来る

ブロックの後ろに別のメソッドを書くことが出来ます。

names = ["鈴木", "高橋"]
new_names = names.map { |name| "#{name}さん"}.join("と")
new_names #=> "鈴木さんと高橋さん"

参考文献

プロを目指す人のためのRuby入門 伊藤 淳一 (著)

さいごに

まだまだ知らない便利なメソッドがあるので
効率的なコードを書くためにこれからも学んでいきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0