给定特定键的哈希值数组

时间:2013-08-05 04:50:48

标签: ruby hash

鉴于某些键,我想从散列中获取一个值数组(按照我给出键的顺序)。我这样做了:

class Hash

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

end

我修改了Hash类,因为我计划在我的代码中几乎无处不在地使用它。

但我不太喜欢修改核心课程的想法。是否有内置解决方案? (找不到任何东西,所以我不得不写这个。)

2 个答案:

答案 0 :(得分:5)

您应该可以使用values_at

  

values_at(key,...)→array

     

返回一个包含与给定键关联的值的数组。另请参阅Hash.select

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

文档没有具体说明返回数组的顺序,但是:

  1. 该示例暗示该数组将匹配key订单。
  2. 标准实施按正确顺序执行。
  3. 这种方法没有其他合理的行为方式。
  4. 例如:

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

答案 1 :(得分:0)

我建议你这样做:

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