[英]How can I group this array of hashes?
我有这个哈希数组:
- :name: Ben
:age: 18
- :name: David
:age: 19
- :name: Sam
:age: 18
我需要按age
对它们进行分组,所以它们最终会像这样:
18:
- :name: Ben
:age: 18
- :name: Sam
:age: 18
19:
- :name: David
:age: 19
我试过这样做:
array = array.group_by &:age
但我得到这个错误:
NoMethodError (undefined method `age' for {:name=>"Ben", :age=>18}:Hash):
我究竟做错了什么? 我正在使用Rails 3.0.1和Ruby 1.9.2
&:age
表示group_by
方法应该调用数组项上的age
方法以按数据获取组。 对于您的案例中的哈希项,未定义此age
方法。
这应该工作:
array.group_by { |d| d[:age] }
out = {}
array_of_hashes.each do |a_hash|
out[a_hash[:age]] ||= []
out[a_hash[:age]] << a_hash
end
要么
array.group_by {|item| item[:age]}
正如其他人指出的那样,ruby的Symbol#to_proc
方法被调用,并在数组中的每个哈希上调用age
方法。 这里的问题是哈希不响应age
方法。
现在我们可以为Hash类定义一个,但我们可能不希望它为程序中的每个哈希实例。 相反,我们可以简单地在数组中的每个哈希上定义age
方法,如下所示:
array.each do |hash|
class << hash
def age
self[:age]
end
end
end
然后我们可以像以前一样使用group_by
:
array = array.group_by &:age
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.