我有这样的哈希(它是group_by方法的结果):
{nil => [#<ActiveRecord id ..., ...], #<ActiveRecord ...> => [#<ActiveRecord id ..., ...], ...}
我需要对它进行排序,以便nil
元素成为第一个,然后是所有其他ActiveRecord
个对象。我怎样才能做到这一点?
感谢名单
P.S。
我只需要通过键对哈希进行排序。
答案 0 :(得分:1)
您无法对哈希值but进行排序:
哈希按照插入相应键的顺序枚举其值。
要在开头获取特定密钥,请确保先插入密钥。这是一个例子:
array = [Integer, Range, BasicObject]
hash = array.group_by(&:superclass)
#=> {Numeric=>[Integer], Object=>[Range], nil=>[BasicObject]}
首先获取nil
,使用nil
密钥和merge!
新值创建哈希:
hash = {nil => nil}
hash.merge!(array.group_by(&:superclass))
#=> {nil=>[BasicObject], Numeric=>[Integer], Object=>[Range]}
答案 1 :(得分:0)
假设您的哈希值在h
:
Hash[h.sort { |a,b|
NilClass === a.first ?
(NilClass === b.first ? 0 : -1) :
(NilClass === b.first ? 1 : a.first <=> b.first)
}]
在这里,我们明确定义sort
函数,它将nil
置于前面,然后按键(ActiveRecord
实例在您的情况下对其他元素进行本机排序。)
旁注:你总是可以在数据库中进行排序。