読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【Ruby】each_with_indexは知ってたけどeach.with_indexは知らなかった…

ruby

もっと早く知りたかった…
ってことRubyとかRailsとか多いですよね。

知らなかったけど便利クラスやメソッドがあったんだ、みたいな。


例えばRubyで配列の中身を順番に表示するとき、each使ったりしますよね?

list = [a,b,c]
list.each { |val| puts val } 

で、インデックスも一緒に使いたいって時は
each_with_index使ってました。

list = [a,b,c]
list.each_with_index { |val, index| puts "#{index + 1}番目の値は#{val}です" } 

インデックスは取得できるんですけども、
インデックスって0から始まるので、上記のようにn番目、みたいなのを出そうと思うと
index + 1しなきゃいけないんですよね。
よくある。


…と思ってたら、
with_index
というメソッドを使うことで、インデックスの最初の値を指定することができます。
上記の例を書きなおすと

list = [a,b,c]
list.each.with_index(1) { |val, index| puts "#{index}番目の値は#{val}です" } 

と書けるんです!( ´∀`)b


※2012/11/27追記
↑のeach.with_indexを間違えてeach_with_indexと書いてましたので修正しました…
ご指摘ありがとうございました!


with_indexはEnumeratorクラスのメソッドらしいので、eachだけでなく
map.with_indexとかselect.with_indexみたいにも使えます☆
ブロックにインデックス渡したい時はこれでいける!


お試しあれ。