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.
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"