2011-12-30 25 views
23

tengo un hash comoRuby - obtener el valor de hash de

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

Y tengo una variable k que tendrá el valor que 'key1' o 'key2'.

Quiero obtener el valor de k en una variable v.

¿Hay alguna manera de lograr esto sin usar if o case? Se prefiere una solución de línea única. Por favor ayuda.

Respuesta

57

Convierte la clave de una cadena en un símbolo, y haz una búsqueda en el hash.

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

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

Rails utiliza esta clase llamada HashWithIndifferentAccess que demuestra ser muy útil en estos casos. Sé que solo has etiquetado tu pregunta con Ruby, pero podrías robar la implementación de esta clase de la fuente de Rails para evitar cadenas a símbolos y símbolos a cadenas de conversión en toda la base de código. Hace que el valor sea accesible usando un símbolo o una cadena como clave.

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