1

値からキーを取得する必要があるため、レール上にコードを書きました。しかし、私のコードは、次のように考えるスマートな方法ではありません。

TYPE = {
  1 => "A", 2 => "B", 3 => "C", 4 => "D"
}

def get_key_from_value(val)
  TYPE.each do |k,v|
    if v==val
      return k
    end
  end
  nil
end 

puts get_key_from_value "B" #=> 2

値を使用して Ruby の Hash オブジェクトのキーを取得する最もスマートな方法を教えてください。

4

2 に答える 2

3

Hash#keyメソッドを使用するだけです:

h = {a: 1, b: 2, c: 3, d: 4}
h.key(4) # => :d

あなたの例と同じ:

h = {1=>"A", 2=>"B", 3=>"C", 4=>"D"}
h.key("D") # => 4
于 2013-02-11T06:36:04.633 に答える
2

1 つの可能性は、Hash.invertを使用することです。

TYPE = {
  1 => "A", 2 => "B", 3 => "C", 4 => "D"
}

TYPE_INVERT = TYPE.invert #you'll probably want a better name than this

puts TYPE_INVERT['B'] #=> 2

ハッシュに同じ値を持つ複数のキーがある場合は注意が必要です。逆ハッシュではそのうちの 1 つしか得られないためです。

于 2013-02-11T06:17:07.310 に答える