2010-12-07 29 views
8

Şu anda aşağıdaki gibi görünen bir yakut hash ile çalışıyorum:Ruby: öğeleri hash değerlerine göre bul

{"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
       {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 

Bunlar iki çalışan örneğidir ve çalışanları değerlere göre çekebilmem gerekir. Örneğin, seviye ==2 olan tüm çalışanları ya da pozisyonu olan tüm çalışanları almak istiyorum == S1.

Bunu Ruby'de nasıl yaparım?

+4

değeri tırnak koymak emin olun. – jwueller

+1

Öneri için teşekkürler, kodu bir dökümden çektim, dahili anahtarlar, bunu nasıl çözeceğinizi değiştiriyor mu, yoksa sadece sözdizimi önerileri yapıyorsunuz. –

+0

@Jeremy Sadece bir öneri. –

cevap

23

Hash#select veya Array#select'u kullanın.

level_2_employees = infoHash["employee"].select {|k| k["level"] == "2"} 

Bu kriterlere göre Karmaların çalışanın bilgi bir dizi döndürür. düzeyde

Anahtarlar gibi semboller kullanarak tavsiye
5
ehash = {"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
         {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 
ehash['employee'].find_all { |e| e['level'] == 2} 
ehash['employee'].find_all { |e| e['position'] == 'S2'} 
İlgili konular