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 に答える