2011-12-30 38 views
23

inerek değeri IYakut - karma

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

gibi bir karma var Ve ben 'key1' veya 'key2' olarak değere sahip olacaktır değişken k var.

k değerini v değişkenine almak istiyorum.

if veya case kullanarak bunu gerçekleştirmenin herhangi bir yolu var mı? Tek bir hat çözümü tercih edilir. Lütfen yardım et.

cevap

57

Anahtarı bir dizgeden sembole dönüştürün ve karma içerisinde bir arama yapın.

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

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

Raylar gibi durumlarda çok faydalı olduğunu kanıtlamaktadır HashWithIndifferentAccess denilen bu sınıfı kullanır. Sorunuzu sadece Ruby ile etiketlediğinizi biliyorum, ancak kod sınıfının genelinde dizgeyi dönüştürmek için sembol ve sembollerden oluşan dizgeyi önlemek için bu sınıfın uygulamasını Rails kaynağından çalabilirsiniz. Bir sembolü veya bir dize anahtar olarak kullanarak değeri erişilebilir kılar.

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