簡體   English   中英

使用nil鍵和數組值對哈希排序

[英]Sort hash with nil key and array values

我有一個像這樣的哈希(它是group_by方法的結果):

{nil => [#<ActiveRecord id ..., ...], #<ActiveRecord ...> => [#<ActiveRecord id ..., ...], ...}

我需要對其進行排序,以使nil元素成為第一個元素,然后是所有其他ActiveRecord對象。 我怎樣才能做到這一點? 感謝名單

PS

  1. 是的,我需要一個ActiveRecord對象作為鍵(不是符號或其他符號)
  2. 由於復雜的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實例)。

旁注:您始終可以在數據庫中進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM