Prawdopodobnie brakuje mi czegoś oczywistego, ale czy istnieje sposób, aby uzyskać dostęp do indeksu / liczby iteracji wewnątrz każdej pętli mieszania?
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
źródło
źródło
Odpowiedzi:
Jeśli chcesz poznać indeks każdej iteracji, możesz użyć
.each_with_index
źródło
hash.each_with_index { |(key,value),index| ... }
hash.each
daje każdą parę klucz-wartość w plikuArray
. Pareny robią to samo, co(key,value) = arr
umieszczanie pierwszej wartości (klucza) wkey
, a drugiej wvalue
.each_with_index
znalazłem listy w RDoc for Hash: ruby-doc.org/core/classes/Hash.html . Teraz widzę, że jest członkiem Enumerable. Ale szkoda, że nie mogę rdoc Odsyłaczeeach_with_index
od Hash.html.irb
i używam,ClassName#instance_methods
aby upewnić się, że niczego nie przegapiłem.ClassName#instance_methods
był bardzo pomocnyMożesz iterować po klawiszach i ręcznie uzyskać wartości:
EDYCJA: zgodnie z komentarzem rampion, właśnie dowiedziałem się, że możesz uzyskać zarówno klucz, jak i wartość jako krotkę, jeśli iterujesz
hash
:źródło
key
w pierwszej pętli znajduje się tablica pary klucz + wartość, więc używanie jej jako indeksu whash
jest błędne. Czy kiedykolwiek to przetestowałeś?