2011-12-30 12 views
23

ho un hash comeRubino - ottenendo il valore di hash

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

E ho una variabile k che avrà il valore come 'key1' o 'key2'.

Desidero ottenere il valore k in una variabile v.

Esiste un modo per ottenere ciò senza usare if o case? Una soluzione a linea singola è preferita. Per favore aiuto.

risposta

57

Converti la chiave da una stringa a un simbolo e fai una ricerca nell'hash.

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

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

Rails usa questa classe chiamata HashWithIndifferentAccess che si rivela molto utile in tali casi. So che hai solo taggato la tua domanda con Ruby, ma potresti rubare l'implementazione di questa classe dall'origine di Rails per evitare la stringa per il simbolo e il simbolo per convertire le stringhe in tutta la base di codice. Rende accessibile il valore utilizzando un simbolo o una stringa come chiave.

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