2016-11-22 27 views
0

我有一些隨機順序的散列和該散列的鍵是在一個數組中。如何根據數組中的這些鍵的順序,通過鍵對ruby散列進行排序?

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

如何獲得這個命令的方式,其中

new_hash = { 'ONE' => "this is the first", 
      'TWO' => 'second', 
      'THREE' => "this is the third" } 
+0

爲什麼下令哈希?由於他們是隨機訪問,這並沒有太大的好處。只需按'my_array'的順序獲取密鑰即可。 –

+0

請閱讀「[問]」和「[mcve]」和http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users。我們希望看到您的努力,無論您是在哪裏尋找解決方案,爲什麼這些解決方案都無濟於事,或者以最低代碼顯示您爲解決問題所寫的內容以及解釋爲什麼無法正常工作。如果沒有那樣看起來你要求我們爲你解決問題。而且,就你所知,這個問題已經被多次提出,所以答案就在那裏。 –

+0

@theTinMan是否有重新排列哈希以提高可讀性的情況? –

回答

1

試試這個:

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

my_array.zip(my_array.map {|s| my_hash[s]}).to_h 
#=> {"ONE"=>"this is the first", "TWO"=>"second", "THREE"=>"this is the third"} 
+2

希望有一個特定的順序可能會有問題,所以最好避免。 – tadman

+1

哈希依然保持它們的插入順序,這有點不錯,但它不是必需的,也不應該被@tadman所說。養成按鍵排序的習慣,然後按順序提取值; 'values_at'是我們的朋友,非常簡單。對散列中的鍵進行排序或排序只會浪費CPU時間,因爲在檢索值時可以完成同樣的事情。 –

+1

是的,這就是我的意思。爲了得到一些任意的順序而重建哈希是非常昂貴的,比如當你在兩個其他鍵之間插入一個鍵時你必須要做。像數組一樣處理它們本質上是有序的,通常是一個錯誤。它們只是爲了一致性的緣故而訂購的:以相同方式生成的兩個哈希將相同。歷史上情況並非如此,他們往往是隨機的,不可預測的。 – tadman

相關問題