[英]Sort hash with nil key and array values
我有一个像这样的哈希(它是group_by方法的结果):
{nil => [#<ActiveRecord id ..., ...], #<ActiveRecord ...> => [#<ActiveRecord id ..., ...], ...}
我需要对其进行排序,以使nil
元素成为第一个元素,然后是所有其他ActiveRecord
对象。 我怎样才能做到这一点? 感谢名单
PS
我只需要按键对哈希排序。
您无法对哈希进行排序, 但是 :
哈希值按插入相应键的顺序枚举其值。
要在开始时获取特定的密钥,只需确保先插入它即可。 这是一个例子:
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
实例)。
旁注:您始终可以在数据库中进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.