今更かもしれないけど、感動したのでメモ。
リストをeachなどで回すとき、インデックスも一緒に欲しいと言うのはどの言語でも往々にしてある。Javaで書いている時なんかせっかく拡張forで書こうとしたけどしぶしぶ普通のforに戻す、とかよくやる。
そんなときのために、Rubyにはeach_with_indexがある。要素とインデックスを一緒にブロックに渡してくれる。かゆい所に手が届く粋なヤツ。
(1..10).each_with_index do |element, index| # ... end
一方、Enumerableにはselectやmapなど便利なメソッドがいっぱいある。こいつらもindexと一緒に回したいことってない?
こうすればいける。
(1..10).each_with_index.select do |element, index| # ... end
Enumeratorを使ってるのでRuby 1.9出ない場合はrequireする必要がある。
injectとかも行ける。
(1..10).each_with_index.inject do |result, (element, index)| # ... end
Enumerable#each_with_index便利すぎ。