0
1

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.

with_indexメソッドについて

Posted at

皆様こんにちは、プレイライフの熊崎です!

本日2本目の記事はwith_indexメソッドについて書こうと思います。

with_indexメソッドとは

生成時のパラメータに従って、要素にインデックスを添えて繰り返します。インデックスは offset から始まります。
ブロックを指定した場合の戻り値は生成時に指定したレシーバ自身です。
参考URL: https://docs.ruby-lang.org/ja/latest/method/Enumerator/i/with_index.html

どのようなタイミングで使用するのか?

→ 繰り返し処理の最中に、index(添字)を使用したいとき

具体例

あるイベントの開催候補日の配列を、第一希望: 2021年9月5日のように、添字も含めた文字列を表示したいとき

sample.rb
candidate_dates = ['2021年9月5日', '2021年9月6日', '2021年9月7日']
candidate_dates.each.with_index(1) do |date, index|
  p "第#{index}希望:#{date}"
end
#=> "第1希望:2021年9月5日"
#   "第2希望:2021年9月6日"
#   "第3希望:2021年9月7日"

特徴

  • 開始番号を指定できるため、直感的にわかりやすいコードをかける。
  • mapメソッドやselectメソッドなどにも使用できる。

開始番号を指定できるため、直感的にわかりやすいコードをかける。

sample.rb
# each_with_indexを使用した書き方
fruits.each_with_index do |fruit, index|
  p "私が#{index + 1}番目に好きな果物は#{fruit}です。" # 開始番号を指定できないため、 index + 1と書く必要がある。
end
#=> "私が1番目に好きな果物はリンゴです。"
#   "私が2番目に好きな果物はオレンジです。"
#   "私が3番目に好きな果物はバナナです。"

# each.with_indexを使用した書き方
fruits.each.with_index(1) do |fruit, index| # 開始番号を指定できるので、こちらの方が直感的にわかりやすい
  p "私が#{index}番目に好きな果物は#{fruit}です。" 
end
#=> "私が1番目に好きな果物はリンゴです。"
#   "私が2番目に好きな果物はオレンジです。"
#   "私が3番目に好きな果物はバナナです。"

mapメソッドやselectメソッドなどと組み合わせて使用できる。

with_indexメソッドはEnumeratorクラスのメソッドのため、Enumeratorオブジェクトを返すmapメソッドやselectメソッドなどと組み合わせて使用することができる。

sample.rb
candidate_dates = ['2021年9月5日', '2021年9月6日', '2021年9月7日']
candidate_dates.map.with_index(1) do |date, index|
  "第#{index}希望:#{date}"
end
#=> ["第1希望:2021年9月5日", "第2希望:2021年9月6日", "第3希望:2021年9月7日"]

まとめ

  • mapメソッドやselectメソッドにもindexを振れる。
  • each_with_indexと違って、開始番号を指定できる。
  • 繰り返し処理の中で添字を使用したい場合に使われる。

参考資料

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?