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