web-dev-qa-db-fra.com

Ruby - obtention de la valeur du hachage

J'ai un hachage comme

{:key1 => "value1", :key2 => "value2"}

Et j'ai une variable k qui aura la valeur 'key1' ou 'key2'.

Je veux obtenir la valeur de k dans une variable v.

Existe-t-il un moyen d'y parvenir sans utiliser if ou case? Une solution sur une seule ligne est préférée. Veuillez aider.

27
Sayuj

Convertissez la clé d'une chaîne en symbole et effectuez une recherche dans le hachage.

hash = {:key1 => "value1", :key2 => "value2"}
k = 'key1'

hash[k.to_sym] # or iow, hash[:key1], which will return "value1"

Rails utilise cette classe appelée HashWithIndifferentAccess qui s'avère très utile dans de tels cas. Je sais que vous n'avez tagué votre question qu'avec Ruby, mais vous pouvez voler l'implémentation de cette classe à partir de la source de Rails pour éviter les conversions de chaîne en symbole et de symbole en chaîne dans votre base de code. Il rend la valeur accessible en utilisant un symbole ou une chaîne comme clé.

hash = HashWithIndifferentAccess.new({:key1 => "value1", :key2 => "value2"})
hash[:key1]  # "value1"
hash['key1'] # "value1"
72
Anurag