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に関する講座を開設しているので是非そちらもチェックしてみてください。

目的別!最先端ITスキル講座

海外の人気講師によるWeb制作のベストセラ―講座

【世界で30万人が受講】フルスタック・Webエンジニア講座(2017最新版)
【世界で30万人が受講】フルスタック・Webエンジニア講座(2017最新版)

ウェブデザインの基礎、サーバーサイドプログラミング、モバイルアプリ開発、APIプログラミングなどを網羅的にマスターできる

最新!iOS11アプリ開発講座

【6日で速習】iOS 11 Swift 4アプリ開発入門 決定版 20個のアプリを作る ARKit,CoreML,NFC
【6日で速習】iOS 11 Swift 4アプリ開発入門 決定版 20個のアプリを作る ARKit,CoreML,NFC

地図検索、ARなど20個以上のアプリを作って学べる実践講座

日本を代表するデータサイエンティスト辻真吾氏による人気講座

【世界で5万人が受講】実践 Python データサイエンス
【世界で5万人が受講】実践 Python データサイエンス

データ解析の基本、可視化、統計、機械学習などデータサイエンスに関するあらゆる実践的なスキルがPythonで身に付く!

初級者から学べる人工知能講座の決定版

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習

初心者向けの人工知能と機械学習のコース。文字認識や株価分析なども実施

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

関連記事