簡體   English   中英

如何對這個哈希數組進行分組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM