Menu
Coddy logo textTech

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"]   # nil

Hash.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"]   # 0

Bir 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.

challenge icon

Görev

Kolay

Virgü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: 20

Hiç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
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