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

web開発

2016/06/24

web開発

プログラミング言語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が大体理解できたのではないでしょうか。

 

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開発ができるようになります。

udemyでは、初心者でも安心なRuby on Railsに関する講座を開設しているので是非そちらもチェックしてみてください。

  

Ruby on Railsを学ぶならこちらの講座がおすすめです。

【3日でできる】はじめての Ruby on Rails 4 入門(Rubyから学べる) - Udemy

【3日でできる】はじめての Ruby on Rails 4 入門(Rubyから学べる) - Udemy

Ruby on Railsをマスターしたら、あなたはどんなWebサービスを作りますか?

動画で学習する

  • シェア
  • ツイート
  • Poket
  • はてなブックマーク
  • フォロー
  • シェア
  • ツイート
  • Poket
  • はてなブックマーク
  • フォロー

関連記事