2013-08-05 59 views
1

給定某些鍵,我想從哈希中獲得一個數組值(按照我給出的鍵的順序)。我已經做到了這一點:獲得給定特定鍵的哈希值數組

class Hash 

    def values_for_keys(*keys_requested) 
    result = [] 
    keys_requested.each do |key| 
     result << self[key] 
    end 
    return result 
    end 

end 

我修改了Hash類,因爲我不打算在我的代碼幾乎無處不在使用它。

但我並不喜歡修改核心類的想法。是否有內建解決方案? (找不到任何,所以我不得不寫這個)。

+0

你也可以寫一個實用工具類,其中烏爾功能將哈希和密鑰作爲PARAMS。 –

回答

5

您應該能夠使用values_at

values_at(鍵,...)→陣列

返回包含與給定鍵相關的值的數組。另見Hash.select

h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" } 
h.values_at("cow", "cat") #=> ["bovine", "feline"] 

的文件並沒有具體說對返回數組的順序什麼,但:

  1. 的例子意味着數組將匹配key順序。
  2. 標準實現以正確的順序執行。
  3. 該方法行爲沒有其他明智的方法。

例如:

>> h = { :a => 'a', :b => 'b', :c => 'c' } 
=> {:a=>"a", :b=>"b", :c=>"c"} 
>> h.values_at(:c, :a) 
=> ["c", "a"] 
+0

upvoted它,這比我的答案好得多:) –

0

我會建議你這樣做:

your_hash.select{|key,value| given_keys.include?(key)}.values