Varsayılanlarla Hash.new
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 33 / 56.
Varsayılan olarak, bir hash içinde eksik bir anahtarı aramak nil döndürür:
scores = {}
puts scores["Alice"] # nilHash.new(default) bunu değiştirir. Eksik her anahtar, kendisine verdiğiniz değeri döndürür:
scores = Hash.new(0)
puts scores["Alice"] # 0Bir sayaç yazmanın en temiz yolu budur. Artırmadan önce if scores[name].nil? kontrolü yapmana gerek yoktur:
counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
counts[letter] += 1
end
puts counts.inspect # {"a"=>3, "b"=>1, "c"=>1}Önemli: Hash.new(0), varsayılanı 0 olarak ayarlar ancak anahtarı okuduğunuzda saklamaz. Atama yapana kadar hash boş kalır. Bu nedenle counts[letter] += 1 yazdığınızda anahtar yeni değerle eklenir.
Görev
KolayVirgülle ayrılmış bir category:amount girdileri listesi okuyun (ör. food:12,gas:30,food:8,books:25,gas:15). Hash.new(0) kullanarak kategori başına toplamların bir hash'ini oluşturun, ardından yalnızca toplamı en az 20 olan kategorileri, her satıra bir tane gelecek şekilde ve toplamlarına göre azalan sırada yazdırın:
<category>: <total>Yukarıdaki örnek girdi için çıktı şöyledir:
gas: 45
books: 25
food: 20Hiçbir kategori 20 değerine ulaşmazsa hiçbir şey yazdırmayın.
Kendin dene
entries = gets.chomp.split(",")
# TODO: totals = Hash.new(0); kategori başına tutarı biriktir;
# sonra toplamı >= 20 olan kategorileri yazdır, toplama göre azalan sırada
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