Рассчитать сумму объектов для каждого уникального свойства объекта в Ruby - PullRequest
2 голосов
/ 13 апреля 2010

Я помогал с ответом в на этот вопрос , и он вызвал мой собственный вопрос.

  1. Pie - это объект, в котором создан массив piecesиз PiePiece объектов.
  2. Каждый PiePiece имеет атрибут flavor

Как создать хеш, который выглядит следующим образом:

# 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 Ответ

5 голосов
/ 13 апреля 2010
def inventory
  Hash[pieces.group_by(&:flavor).map{|f,p| [f, p.size]}]
end
...