Ich möchte eine bestimmte Ausgabe erhalten, die einen Ruby Hash iteriert.
Dies ist der Hash, über den ich iterieren möchte:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Dies ist die Ausgabe, die ich erhalten möchte:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
Wie kann ich in Ruby eine solche Ausgabe mit meinem Hash erhalten?
Antworten:
In Bezug auf die Reihenfolge sollte ich hinzufügen, dass in 1.8 die Elemente in zufälliger Reihenfolge iteriert werden (also tatsächlich in einer Reihenfolge, die durch die Hashing-Funktion von Fixnum definiert ist), während sie in 1.9 in der Reihenfolge des Literal iteriert werden.
quelle
?
Schlüssel ersetzen? Beispiel:|?, array|
Ist diese Syntax gültig??
ist kein gültiger Variablenname in Ruby. Sie können verwendet werden_
, aber Sie nicht brauchen , um.|_, v|
Der einfachste Weg, einen Hash zu durchlaufen, ist folgender:
quelle
quelle
Wenn Sie sort für einen Hash aufrufen, wird dieser in verschachtelte Arrays konvertiert und anschließend nach Schlüssel sortiert. Sie benötigen also nur Folgendes:
Und wenn Sie den Teil "----" nicht wirklich benötigen, kann es nur sein:
quelle
Meine einzeilige Lösung:
hash.each { |key, array| puts "#{key}-----", array }
Ich denke, es ist ziemlich einfach zu lesen.
quelle
Sie können auch verfeinern,
Hash::each
damit die rekursive Aufzählung unterstützt wird. Hier ist meine Version vonHash::each
(Hash::each_pair
) mit Block- und Enumerator- Unterstützung:Hier sind Verwendungsbeispiele von
Hash::each
mit und ohnerecursive
Fahne:Hier ist ein Beispiel aus der Frage selbst:
Schauen Sie sich auch meine rekursive Version von
Hash::merge
(Hash::merge!
) hier an .quelle