2014年7月1日火曜日

RubyのEnumerator#with_index

Rubyらしくイテレータを使ってループを記述したいけど、インデックスも併用したい。ただ、eachじゃないからeach_with_indexは使えない。そんなときはEnumerator#with_indexを使う。

irb> %w(foo bar baz).map.with_index {|e, i| "#{i} : #{e}"}
=> ["0 : foo", "1 : bar", "2 : baz"]
irb> %w(foo bar baz).map.with_index(1) {|e, i| "#{i} : #{e}"}
=> ["1 : foo", "2 : bar", "3 : baz"]
こんな感じで、任意のEnumeratorからインデックス付きEnumeratorを作れる。with_indexの引数でインデックスの初期値を指定できるのも、地味に嬉しい。

0 件のコメント:

コメントを投稿