1

给定某些键,我想从哈希中获取一个值数组(按照我给键的顺序)。我这样做了:

class Hash

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

end

我修改了这个Hash类,因为我确实计划在我的代码中几乎所有地方都使用它。

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

4

2 回答 2

5

您应该能够使用values_at

values_at(key, ...) → 数组

返回一个包含与给定键关联的值的数组。另请参阅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"]
于 2013-08-05T05:09:27.363 回答
0

我会建议你这样做:

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

于 2013-08-05T04:54:18.790 回答