Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算Ruby中每个唯一对象属性的对象总数_Ruby_Arrays_Hash_Enumerable - Fatal编程技术网

计算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