Saya ingin mendapatkan hasil spesifik dengan mengulangi Ruby Hash.
Ini Hash yang ingin saya ulangi:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Ini adalah output yang ingin saya dapatkan:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
Di Ruby, bagaimana saya bisa mendapatkan hasil seperti itu dengan Hash saya?
Jawaban:
Mengenai pesanan saya harus menambahkan, bahwa dalam 1,8 item akan diulang dalam urutan acak (well, sebenarnya dalam urutan yang didefinisikan oleh fungsi hashing Fixnum), sedangkan pada 1.9 akan diulang dalam urutan literal.
sumber
?
kunci? mis:|?, array|
apakah ini sintaks yang valid??
bukan nama variabel yang valid di Ruby. Anda dapat menggunakan_
, tetapi Anda tidak perlu melakukannya.|_, v|
Cara paling dasar untuk beralih pada hash adalah sebagai berikut:
sumber
sumber
Memanggil semacam pada hash mengubahnya menjadi array bersarang dan kemudian mengurutkannya dengan kunci, jadi yang Anda butuhkan adalah ini:
Dan jika Anda tidak benar-benar membutuhkan bagian "----", itu bisa saja:
sumber
Solusi satu baris saya:
hash.each { |key, array| puts "#{key}-----", array }
Saya pikir ini cukup mudah dibaca.
sumber
Anda juga dapat memperbaiki
Hash::each
sehingga akan mendukung pencacahan rekursif . Ini adalah versi sayaHash::each
(Hash::each_pair
) dengan dukungan blok dan enumerator :Berikut adalah penggunaan contoh dari
Hash::each
dengan dan tanparecursive
bendera:Ini adalah contoh dari pertanyaan itu sendiri:
Lihat juga versi rekursif saya
Hash::merge
(Hash::merge!
) di sini .sumber