计算Ruby中每个唯一对象属性的对象总和

时间:2010-04-12 21:57:49

标签: ruby arrays hash enumerable

我正在this question帮助回答问题,这引发了我自己的问题。

  1. Pie是一个对象,其pieces数组由PiePiece个对象组成。
  2. 每个PiePiece都有flavor属性
  3. 如何创建如下所示的哈希:

    # flavor => number of pieces
    {
      :cherry => 3
      :apple => 1
      :strawberry => 2
    }
    

    这有效,但我认为可以改进

    def inventory
      hash = {}
      pieces.each do |p|
        hash[p.flavor] ||= 0
        hash[p.flavor] += 1
      end
      hash
    end
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:5)

def inventory
  Hash[pieces.group_by(&:flavor).map{|f,p| [f, p.size]}]
end