Ruby each_with_indexを即理解!値を1から開始させる方法も解説

Ruby each_with_indexを即理解!値を1から開始させる方法も解説

プログラミング言語Rubyのメソッドの1つであるeach_with_indexについて丁寧に解説します。

Ruby each_with_indexは、一般的なeachメソッドに加えて、配列の要素の番号も扱うことができます(以下で詳しく解説します。)

全ての項目で、具体的なソースコードを例にしてRuby each_with_indexを丁寧に解説します。

なので、Ruby初心者でもeach_with_indexが理解できる内容となっております。

また、よくある疑問として挙げられる、値を0からではなく1から開始させる方法や、each_with_indexと似ているeach.with_indexメソッドについても解説します。

本記事だけでRuby each_with_indexについて完璧に網羅しています。

ぜひ最後まで読んで、Ruby each_with_indexをマスターしてください。

Ruby each_with_indexの書き方

まずは、each_with_indexの書き方からみていきましょう。

【Ruby each_with_indexの書き方】

配列名.each_with_index do |item, i|

・・・

具体的なソースコードでみていきましょう。

#から改行まではコメントです。(プログラムの動作に影響を与えません)

sports=[“サッカー”, “テニス”, “野球”]

#配列sportsを用意

sports.each_with_index do |item, i|

puts “#{i}番目の要素は#{item}です。”

end

【結果】

0番目の要素はサッカーです。

1番目の要素はテニスです。

2番目の要素は野球です。

・配列の要素(添字)は0から始まります。

・#{~}は変数展開といいます。

#{ }の中に式や変数を入れると、その式や変数が文字列の中に展開されます。

【変数展開の例】

name=”udemy”

puts “私は#{name}で学習します。”

【結果】

私はudemyで学習します。

あとは一般的なeach文と同じですね。each_with_indexでは、変数展開に気をつけましょう。

以上のソースコードの例から、Ruby each_with_indexが大体理解できたのではないでしょうか。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

Ruby each_with_indexの値を1から始める方法

先ほどのソースコードの例では、値(i)が0からスタートしていました。

しかし、0からではなく、1から始めたいという場合はどうしたら良いでのしょうか?(以下の様な結果にしたい)

1番目の要素はサッカーです。

2番目の要素はテニスです。

3番目の要素は野球です。

正解はとてもシンプルです。

puts “#{i}番目の要素は#{item}です。”

「#{i}」を、「#{i+1}」に変更します。すると、以下のようなソースコードになりますね。

sports=[“サッカー”, “テニス”, “野球”]

#配列sportsを用意

sports.each_with_index do |item, i|

puts “#{i+1}番目の要素は#{item}です。”

end

【結果】

1番目の要素はサッカーです。

2番目の要素はテニスです。

3番目の要素は野球です。

Ruby each_with_indexで、値(i)を1から始めたい場合は、「#{i}」を「#{i+1}」に変更する。これをしっかり覚えておきましょう!

 

Ruby each_with_indexとeach.with_indexの違い

Rubyでは、each_with_indexに似たメソッドとして、each.with_indexがあります。

2つのメソッドの違いは何なのでしょうか?

each_with_indexでは、上記の通り、値は0から始まり、0以外の値から開始させたい場合は#{i+1}のように記述しなければなりませんでした。

しかし、each.with_indexを使えば、もっと手軽に0以外の値から開始させることができます

each.with_indexの書き方は以下の通りです。

【Ruby each.with_indexの書き方】

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

・・・

これだけでは分かりにくいので、具体的なソースコードを紹介します。

今回は開始させたい値を30にしてみます。

fruites = [“リンゴ”, “メロン”, “ブドウ”]

#配列fruitesを用意

fruites.each.with_index(30) do |item, i|

puts “#{i}番目のフルーツは#{item}です。”

end

【結果】

30番目のフルーツはリンゴです。

31番目のフルーツはメロンです。

32番目のフルーツはブドウです。

ちゃんと値(i)が30から開始されてますね。

each_with_indexにおいて「#{i+1}」とする手間が省けました。

値を0以外から開始させたい場合はeach_with_indexよりもeach.with_indexの方が直感的には分かりやすいかもしれませんね。

いかがでしたか?Ruby each_with_indexについての理解ができましたか?

プログラミング言語Rubyを理解できるようになってくると、Railsというフレームワーク(Ruby on Rails)を使ってWEB開発ができるようになります。