[英]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.