我有一个这样的散列(它是group_by方法的结果):
{nil => [#<ActiveRecord id ..., ...], #<ActiveRecord ...> => [#<ActiveRecord id ..., ...], ...}
我需要对它进行排序,使nil
元素成为第一个,然后是所有其他ActiveRecord
对象。我该怎么做?Thanx
p.S.
- 是的,我需要一个ActiveRecord对象作为键(而不是符号或其他一些)
- 由于复杂的SQL请求,我无法在数据库中执行订单
我只需要按键对散列进行排序。
您不能对哈希进行排序,但是:
哈希按插入相应键的顺序枚举它们的值。
要在开始时获得特定的密钥,只需确保先插入即可。这里有一个例子:
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]}
假设您在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
实例)
旁注:您总是可以在数据库中进行排序。