Ich vermisse wahrscheinlich etwas Offensichtliches, aber gibt es eine Möglichkeit, auf den Index / die Anzahl der Iterationen innerhalb eines Hash jeder Schleife zuzugreifen?
hash = {'three' => 'one', 'four' => 'two', 'one' => 'three'}
hash.each { |key, value|
# any way to know which iteration this is
# (without having to create a count variable)?
}
ruby
enumerable
Upgradingdave
quelle
quelle
Antworten:
Wenn Sie den Index jeder Iteration kennen möchten, können Sie ihn verwenden
.each_with_index
quelle
hash.each_with_index { |(key,value),index| ... }
hash.each
gibt jedes Schlüssel-Wert-Paar in einem anArray
. Die Eltern tun das Gleiche wie(key,value) = arr
den ersten Wert (den Schlüssel)key
und den zweiten Wertvalue
.each_with_index
im RDoc für Hash aufgeführt: ruby-doc.org/core/classes/Hash.html . Jetzt sehe ich, dass es ein Mitglied von Enumerable ist. Aber schade, dass RDoc keinen Querverweiseach_with_index
von Hash.html erstellen kann.irb
undClassName#instance_methods
stelle sicher, dass ich nichts verpasst habe.ClassName#instance_methods
war sehr hilfreichSie können die Schlüssel durchlaufen und die Werte manuell abrufen:
BEARBEITEN : Laut Kommentar der Rampion habe ich auch gerade erfahren, dass Sie sowohl den Schlüssel als auch den Wert als Tupel erhalten können, wenn Sie Folgendes wiederholen
hash
:quelle
key
In der ersten Schleife befindet sich ein Array aus Schlüssel + Wert-Paar, daher ist die Verwendung als Index inhash
falsch. Hast du es jemals getestet?