2010-12-07 16 views
8

Ich bin derzeit mit einem Rubin Hash arbeiten, die wie folgt aussieht:Rubin: Artikel in Hash-Werte finden

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

Dies sind zwei Beispiele für Mitarbeiter und ich müssen in der Lage sein, Mitarbeiter zu ziehen durch Werte. Ich möchte zum Beispiel alle Mitarbeiter mit Level == 2 oder alle Mitarbeiter mit der Position == S1 erhalten.

Wie würde ich das in Ruby tun?

+4

in Anführungszeichen steht. Ich empfehle die Verwendung von Symbolen als Schlüssel. – jwueller

+1

Danke für den Vorschlag, ich habe den Code von einem Dump gezogen, sie sind intern Schlüssel, ändert sich das, wie Sie es lösen würden, oder machen Sie einfach Syntaxvorschläge. –

+0

@ Jeremy Es ist nur ein Vorschlag. –

Antwort

23

Verwenden Sie Hash#select oder Array#select.

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

Dies wird eine Reihe von Mitarbeiter Info Hashes nach Ihren Kriterien zurückgeben. Stellen Sie sicher, dass der Wert

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'}