Rubyらしくイテレータを使ってループを記述したいけど、インデックスも併用したい。ただ、eachじゃないからeach_with_indexは使えない。そんなときはEnumerator#with_indexを使う。
irb> %w(foo bar baz).map.with_index {|e, i| "#{i} : #{e}"}こんな感じで、任意のEnumeratorからインデックス付きEnumeratorを作れる。with_indexの引数でインデックスの初期値を指定できるのも、地味に嬉しい。
=> ["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"]
0 件のコメント:
コメントを投稿