2013-04-30 66 views
2

所以我有這個哈希。它看起來像這樣:如何將這些散列給紅寶石給這些鍵?

{ 
    'arg0' => '126150656000', 
    'arg1' => 'Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz', 
    'arg2' => '2790', 
    'arg3' => '3276320768', 
    'arg4' => '8467496960', 
    'arg5' => 'Windows 7', 
    'arg6' => '6.1', 
    'arg7' => 'amd64', 
    'arg8' => '2', 
    'arg9' => '1920', 
    'arg10' => '1200', 
    'arg11' => '32', 
} 

哈希需要被變換成基於密鑰的「ARGN」位置的位置參數的個數的陣列。像這樣。

[ 
    '126150656000', 
    'Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz', 
    '2790', 
    '3276320768', 
    '8467496960', 
    'Windows 7', 
    '6.1', 
    'amd64', 
    '2', 
    '1920', 
    '1200', 
    '32' 
] 

這裏的目標是[0] == ['arg0'][1] == ['arg1'][N] == ['argN']

注:

鑰匙無法保證是正確的順序。例如上面的散列可能在''arg4'之前有'arg9'「。對不起,沒有說清楚。

+0

我認爲你的散列可能不會像你的例子那樣被排序?那麼這將是微不足道的。 – squiguy 2013-04-30 22:49:14

+0

你是對的。按照上面的例子,哈希不能期望有鍵。 – 2013-04-30 22:51:45

回答

5
h.sort_by { | a, _ | a.gsub(/[^\d]/, '').to_i }.map(&:last) 
+0

完全有效。你搖滾。 – 2013-04-30 23:07:27

+0

我認爲它仍然會 - sort_by在散列上(並且仍然)返回一個數組對。 – 2013-04-30 23:15:06

+0

@FrederickCheung我剛剛嘗試過,你說得很對!我認爲這會改變哈希的順序以便排序哈希。 – 2013-04-30 23:17:06

1

第一瓦解你的哈希:

h = { 
    'arg1' => 'Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz', 
    'arg3' => '3276320768', 
    'arg4' => '8467496960', 
    'arg7' => 'amd64', 
    'arg5' => 'Windows 7', 
    'arg2' => '2790', 
    'arg6' => '6.1', 
    'arg9' => '1920', 
    'arg8' => '2', 
    'arg0' => '126150656000', 
    'arg10' => '1200', 
    'arg11' => '32', 
} 

你可以這樣做:

h.keys.sort.map{|k| h[k]} 
# => ["126150656000", "Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz", "1200", 
#  "32", "2790", "3276320768", "8467496960", "Windows 7", "6.1", 
#  "amd64", "2", "1920"] 

更新:這是假設你希望你的關鍵字排序的標準排序順序,而如果他們是從字面上'arg0''arg11',是不是你所期望的。我猜你的鍵實際上更有用。如果這些是你實際的鍵,你可以這樣做:

h.keys.sort_by{|s| s[3..-1].to_i}.map{|k| h[k]} 
# => ["126150656000", "Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz", "2790", 
#  "3276320768", "8467496960", "Windows 7", "6.1", "amd64", "2", "1920", 
#  "1200", "32"] 
+0

10和11處於錯誤的位置。 – 2013-04-30 22:57:08

+0

這種排序會將arg1放在arg10和arg11旁邊(因爲它只是一個字符串排序),就像結果顯示的那樣。 – 2013-04-30 22:57:09

+0

@undur_gongor感謝您指出。我假設那些假鑰匙和真正的鑰匙會按照期望的順序排序。我更新了我的答案,以防這些是實際的鑰匙。 – 2013-04-30 23:08:47

0

提供的答案是好的,如果哈希包含的無序鍵。根據你的例子,看起來他們已經訂購了。如果是這種情況,那麼你所需要做的就是{} .values來獲得值的「有序」數組。

+0

他們並不總是爲了。 – 2013-04-30 23:07:46