Menu
Coddy logo textTech

İç İçe Hash'ler

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 35 / 56.

Bir hash değeri kendisi de bir hash olabilir. Bu iç içe yapı, Ruby kodunun yapılandırılmış kayıtları temsil etme biçimidir: id (veya name) anahtarıyla indekslenmiş tek bir hash; burada her değer kendi alanlarını taşır:

students = {
  "Alice" => { age: 20, grade: "A" },
  "Bob"   => { age: 22, grade: "B" }
}

İç içe bir değere ulaşmak için aramaları zincirleyin:

puts students["Alice"][:age]    # 20
puts students["Bob"][:grade]    # B

İç hash'lerden birine yeni bir alan eklemek de aynı şekilde çalışır:

students["Alice"][:major] = "Math"
puts students["Alice"]
# {age: 20, grade: "A", major: "Math"}

Herhangi bir düzeyde anahtarı eksik olabilecek iç içe bir hash’ten güvenli bir şekilde okumak için dig, zincir boyunca ilerler ve yol üzerindeki herhangi bir şey eksikse nil döndürür:

students.dig("Alice", :grade)   # "A"
students.dig("Cara",  :grade)   # nil
challenge icon

Görev

Orta

İç içe bir inventory hash'i verilmiştir: her üst düzey anahtar bir departmanı, her iç anahtar bir öğeyi ve her iç değer stoktaki miktarı (bir tam sayı) belirtir.

Girdinin bir satırını okuyun: virgülle ayrılmış bir department/item arama yolu listesi.

Her yol için, sırayla, yolu çözümlemek üzere dig kullanın. Şunlardan birini yazdırın:

  • Yol mevcut olduğunda <department>/<item>: <qty>
  • dig, nil döndürdüğünde <department>/<item>: missing

Her satırı yazdırdıktan sonra ayrıca bir özet satırı yazdırın:

Total inventory: <sum>

Toplam, özgün hash'teki tüm departmanlardaki her miktarın toplamıdır. İç içe yineleme kullanın (önce her departman, ardından her öğe).

fruits/apples,meat/beef,fruits/dragonfruit,dairy/milk girdisi için çıktı şöyledir:

fruits/apples: 12
meat/beef: 7
fruits/dragonfruit: missing
dairy/milk: 9
Total inventory: 39

Kendin dene

inventory = {
  fruits: { apples: 12, bananas: 4 },
  meat:   { beef: 7, chicken: 5 },
  dairy:  { milk: 9, cheese: 2 }
}
lookups = gets.chomp.split(",")

# TODO: her lookup için dig yap ve qty veya 'missing' yazdır.
#       Then print 'Total inventory: <sum>' across all items.
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Ruby derleyicisi