2013-08-05 64 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