计算Ruby中每个唯一对象属性的对象总数
我当时正在帮助回答一个问题,这引发了我自己的一个问题 饼图是一个对象,它具有由饼图对象组成的碎片数组。 每个馅饼都有一个风味属性 如何创建如下所示的哈希:计算Ruby中每个唯一对象属性的对象总数,ruby,arrays,hash,enumerable,Ruby,Arrays,Hash,Enumerable,我当时正在帮助回答一个问题,这引发了我自己的一个问题 饼图是一个对象,它具有由饼图对象组成的碎片数组。 每个馅饼都有一个风味属性 如何创建如下所示的哈希: # flavor => number of pieces { :cherry => 3 :apple => 1 :strawberry => 2 } 这是可行的,但我认为可以改进 def inventory hash = {} pieces.each do |p| hash[p.flavo
# 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
有什么想法吗?很好。从来都不知道group_by的存在。这是Ruby 1.8.7的新功能。如果使用1.8.6,只需使用Backport。顺便说一句,散列[key\u value\u pairs]对1.8.7也是新的
def inventory
Hash[pieces.group_by(&:flavor).map{|f,p| [f, p.size]}]
end