0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

each_with_indexとeach.with_index(数字)で繰り返し処理

Posted at

0. はじめに

rubyには、「繰り返し処理」というものが存在します。具体的なメソッドで言うと、eachやtimes, whileなどです。

この記事では、私がこれまでによく利用していたeachメソッドの、少し応用系である2つのメソッドを記していきます。あと追加で、私が開発中に作って没になった「好きな場所で繰り返しを止める」メソッドを紹介します。また、具体例では以下の配列を扱います。

array = ["一郎", "二郎", "三郎"]

1. each_with_index

【Ruby each_with_indexの書き方】

配列名.each_with_index do |item, i|
	# 処理
end

array.each_with_index do |item, i|
	puts "#{item}#{i}番目です"
end
=>
一郎は0番目です
二郎は1番目です
三郎は2番目です

each_with_indexは、配列の要素地震が何番目なのか、そしてその番号(index)も処理で同時に扱うことができるメソッドです。indexを扱うことができる繰り返し処理で、処理内で一意性を与えたい時に特に用いていました。

しかし、配列のindexは0から始まります。数え初めが1である人間にとっては、少し馴染みにくい印象があります。そこで便利なのが、次のeach.with_index(数字)メソッドです。

2. each.with_index(数字)

【Ruby each.with_indexの書き方】

配列名.each.with_index(開始させたい値) do |item, i|
	# 処理
end

array.each_with_index(1) do |item, i|
	puts "#{item}#{i}番目です"
end
=>
一郎は1番目です
二郎は2番目です
三郎は3番目です

each.with_index(数字)では、始まりの数字を指定できます。(上記例では始まりが"1")

このメソッドは自由度があり、意味もいくらか伝わりやすい気もします。使い分けが重要ですね。

3. 好きな場所で繰り返しを止める

具体例から示します。

例えば、5つの要素を持つ配列が存在するとします。この配列を2回繰り返し、3回目は要素の2つ目で繰り返しを止めたい、といった場合に使います(笑)。以下は例です。

配列:①②③④⑤

①②③④⑤ | ①②③④⑤ | ①②
                         ↑ココマデ!

この場面で用いるのが、2個のtimesメソッドと、繰返しを中断させるbreakです。

3.times do |i|
  5.times do |ii|
    puts "#{ii}"
    break if i==2 && ii==1
  end  
end 

# 実際の結果
3.times do |i|
  5.times do |ii|
    puts "#{ii}"
    break if i==2 && ii==1
  end  
end
=>
0
1
2
3
4
0
1
2
3
4
0
1

timesメソッドは、指定回数繰り返しを行います。
breakメソッドは、条件分岐により途中で繰返しを中断します。
これらを組み合わせて「好きな場所で繰り返しを止める」メソッドを開発しました。

まぁ、こんなメソッドいつ使うんだよ、って感じですけどね(笑)。

4. さいごに

最後までお読みいただきありがとうございました。
今回の記事のようにこれまで学習した内容について、徐々にアウトプットしていきたい。
自分がアウトプットした内容が誰かの役に立てば幸いです。

余談ですが...

今回この記事で扱った「繰り返し処理」というのは、プログラミング技術発達の過程で生まれた「構造化プログラミング」から優位的に導入されました。プログラムを遂行する三大ロジックのうちの一つです。
「繰り返し処理」の他には、「順次進行」「条件分岐」があります。

「順次進行」は命令を上から実行するロジック、基本的なロジックですね。
「条件分岐」は何らかの判定を行い、その結果で次の命令を決めるロジック。rubyだとif文とかですね。

命令を実行するロジックという切り口では、「繰り返し処理」は中々重要な立ち位置にあるそうですね。

参考
「オブジェクト指向でなぜつくるのか」/ 平澤 章 / 日経BP社 / 2004年6月初版

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?