Saya mungkin melewatkan sesuatu yang jelas, tetapi adakah cara untuk mengakses indeks / hitungan iterasi di dalam hash setiap loop?
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
sumber
sumber
Jawaban:
Jika Anda ingin mengetahui Indeks dari setiap iterasi yang dapat Anda gunakan
.each_with_index
sumber
hash.each_with_index { |(key,value),index| ... }
hash.each
memberikan setiap pasangan nilai kunci diArray
. Tanda kurung melakukan hal yang sama seperti(key,value) = arr
, memasukkan nilai pertama (kunci) ke dalamkey
, dan yang kedua ke dalamvalue
.each_with_index
tercantum di RDoc untuk Hash: ruby-doc.org/core/classes/Hash.html . Sekarang saya melihat bahwa itu adalah anggota Enumerable. Tapi sayang sekali RDoc tidak bisa referensi silangeach_with_index
dari Hash.html.irb
, dan menggunakanClassName#instance_methods
untuk memastikan tidak ada yang terlewat.ClassName#instance_methods
telah sangat membantuAnda dapat mengulangi kunci, dan mendapatkan nilainya secara manual:
EDIT: sesuai komentar rampion, saya juga baru mengetahui bahwa Anda bisa mendapatkan kunci dan nilai sebagai tupel jika Anda mengulang
hash
:sumber
key
di loop pertama adalah larik pasangan kunci + nilai, jadi menggunakannya sebagai indeks dihash
salah. Pernahkah Anda mengujinya?