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

mač*_*ček 2 ruby arrays hash enumerable

我正在帮助解决这个问题的答案,引发了我自己的问题.

  1. Pie是一个具有piecesPiePiece对象组成的数组的对象.
  2. 每个PiePiece都有一个flavor属性

如何创建如下所示的哈希:

# flavor => number of pieces
{
  :cherry => 3
  :apple => 1
  :strawberry => 2
}
Run Code Online (Sandbox Code Playgroud)

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

def inventory
  hash = {}
  pieces.each do |p|
    hash[p.flavor] ||= 0
    hash[p.flavor] += 1
  end
  hash
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

mck*_*eed 5

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