Hash Bersarang
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 35 dari 56.
Nilai hash dapat berupa hash itu sendiri. Bentuk bertingkat ini adalah cara kode Ruby biasanya merepresentasikan record terstruktur, yaitu satu hash dengan kunci berupa id (atau nama), yang setiap nilainya memiliki field sendiri:
students = {
"Alice" => { age: 20, grade: "A" },
"Bob" => { age: 22, grade: "B" }
}Untuk mengakses nilai bertingkat, rangkai pencarian:
puts students["Alice"][:age] # 20
puts students["Bob"][:grade] # BMenambahkan field baru ke salah satu hash bagian dalam bekerja dengan cara yang sama:
students["Alice"][:major] = "Math"
puts students["Alice"]
# {age: 20, grade: "A", major: "Math"}Untuk membaca dengan aman dari hash bersarang yang mungkin tidak memiliki kunci di tingkat mana pun, dig menelusuri rantainya dan mengembalikan nil jika ada bagian yang tidak ditemukan:
students.dig("Alice", :grade) # "A"
students.dig("Cara", :grade) # nilTantangan
SedangDiberikan hash inventory bertingkat: setiap key tingkat teratas adalah departemen, setiap key di dalamnya adalah item, dan setiap nilai di dalamnya adalah jumlah stok (bilangan bulat).
Baca satu baris input: daftar jalur pencarian department/item yang dipisahkan koma.
Untuk setiap jalur, secara berurutan, gunakan dig untuk menelusurinya. Cetak salah satu dari berikut:
<department>/<item>: <qty>jika jalurnya ada<department>/<item>: missingjikadigmengembalikannil
Setelah mencetak setiap baris, cetak juga satu baris ringkasan:
Total inventory: <sum>Totalnya adalah jumlah setiap kuantitas di semua departemen dalam hash asli. Gunakan iterasi bertingkat (setiap departemen, lalu setiap item).
Untuk input fruits/apples,meat/beef,fruits/dragonfruit,dairy/milk, output-nya adalah:
fruits/apples: 12
meat/beef: 7
fruits/dragonfruit: missing
dairy/milk: 9
Total inventory: 39Coba sendiri
inventory = {
fruits: { apples: 12, bananas: 4 },
meat: { beef: 7, chicken: 5 },
dairy: { milk: 9, cheese: 2 }
}
lookups = gets.chomp.split(",")
# TODO: untuk setiap pencarian, gunakan dig lalu tampilkan qty atau 'missing'.
# Lalu tampilkan 'Total inventory: <sum>' dari semua item.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom7Hash Bagian 2
Hash.new dengan Nilai BawaanMenelusuri HashHash BersarangMenggabungkan dan MengubahRangkuman: Penghitung Frekuensi5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi NilaiLatihan sendiri: Compiler Ruby online