Menu
CoddyTech

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]    # B

Menambahkan 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)   # nil
challenge icon

Tantangan

Sedang

Diberikan 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>: missing jika dig mengembalikan nil

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: 39

Coba 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.
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Ruby online