按值的属性对哈希进行排序

时间:2015-04-20 18:33:38

标签: ruby

我有一个#34; Song"对象作为值。这些歌曲对象具有属性“updated_at”'我想按他们排序。我试过像:

@data.values.updated_at.sort

但没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您想查看documentation of Enumerable#sort_by

e.g。

[{name: 'ryan', number: 3},
 {name: 'john', number: 1},
 {name: 'june', number: 2}].sort_by{|item| item[:number]}

希望这足以让你前进。

答案 1 :(得分:1)

这很简单:

@data.values.sort_by(&:updated_at)

例如:

class A
  attr_reader :updated_at
  def initialize(updated_at)
    @updated_at = updated_at
  end
end

@data = { "Bob"=>A.new(3), "Trixi"=>A.new(1), "Bubba"=>A.new(2) }
  #=> {"Bob"=>#<A:0x007ffa191935a0 @updated_at=3>,
  #    "Trixi"=>#<A:0x007ffa19193550 @updated_at=1>, 
  #    "Bubba"=>#<A:0x007ffa19193528 @updated_at=2>} 

@data.values.sort_by(&:updated_at)
  #=> [#<A:0x007ffa19193550 @updated_at=1>,
  #    #<A:0x007ffa19193528 @updated_at=2>,
  #    #<A:0x007ffa191935a0 @updated_at=3>]