Enumerable#index_by() が標準で欲しい

ActiveSupport で用意されている Enumerable#index_by() がRuby本体にとりこまれないかなー。
これ、ほんとよく使うわ。

module Enumerable
  def index_by()   # 名前は to_hash のほうが好み
    hash = {}
    each do |item|
      key = yield(item)
      hash[key] = item
    end
    return hash
  end
end

## example: キーが user id, 値が User オブジェクトであるような Hash を作る
hash = User.find(:all).index_by {|user| user.id }


キーが重複している場合は、値をArrayにまとめてくれるのが必要。こっちはあんまり使ってない。

module Enumerable
  def group_by()
    hash = {}
    each do |item|
      key = yeild(item)
      (hash[key] ||= []) << item
    end
    return hash
  end
end

## example: キーが group_id, 値が User オブジェクトであるような Hash を作る
hash = User.find(:all).group_by {|user| user.group_id }


ActiveSupport の便利メソッドは微妙なのもあるけど、便利なやつは本当に便利なので、ぜひRuby本体にも欲しい。


・・・と思ったら、Enumerable#group_by は 1.8.7 から取り入れられていた。index_by は取り入れられないのかな?