İç İç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) # nilGö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,nildö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: 39Kendin 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.
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
1Dizeler Detaylı İnceleme
Dize Metotlarına Genel BakışDize EnterpolasyonuDizeler Üzerinde YinelemeBölme ve BirleştirmeTekrar - Dize Dokuyucu4Bloklar, Proc'lar ve Lambda'lar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar SözcüğüBlok ParametreleriProc'lar ve Lambda'larÖzet - Özel Yineleyici7Hash'ler 2. Bölüm
Varsayılanlarla Hash.newHash'ler Üzerinde Yinelemeİç İçe Hash'lerBirleştirme ve DönüştürmeTekrar - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Seçme ve ReddetmeMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byTekrar - Veri HattıKendi başına pratik yap: Online Ruby derleyicisi