59 Stimmen

Bestimmen Sie, ob ein Wert in einem Array von Hashes existiert

Ich habe folgendes:

array_of_hashes = [{:a=>10, :b=>20}, {:a=>11, :b=>21}, {:a=>13, :b=>23}]

Wie kann ich herausfinden, ob :a=>11 in array_of_hashes vorhanden ist?

array_of_hashes.include? scheint nicht zu funktionieren

125voto

Magnar Punkte 27970
array_of_hashes.any? {|h| h[:a] == 11}

26voto

DigitalRoss Punkte 138823

Sie haben nach einem booleschen Ergebnis im OQ gefragt, aber wenn Sie wirklich das Hash-Element selbst möchten, tun Sie dies:

array_of_hashes.detect { |h| h[:a] == 11 }

Wenn Sie das Ergebnis wirklich schnell haben möchten, könnten Sie das ursprüngliche Objekt gruppieren und dann das Ergebnis mit einem einzigen Hash-Lookup erhalten:

t = array_of_hashes.group_by { |x| x[:a] }
t[11]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X