Menu
Coddy logo textTech

Varsayılan Değerlerle 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 olan her anahtar, girdiğ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ü yapmanıza 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 okuduğunuzda anahtarı saklamaz. Siz atama yapana kadar hash boş kalır. Bu nedenle, counts[letter] += 1 yazdığınızda, anahtar yeni değerle birlikte eklenir.

challenge icon

Görev

Kolay

Virgülle ayrılmış category:amount girişlerinden oluşan bir listeyi okuyun (örneğin 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 toplamı en az 20 olan kategorileri, toplama göre azalan düzende sıralanmış olarak her satıra bir tane gelecek şekilde yazdırın:

<category>: <total>

Yukarıdaki örnek girdi için çıktı şöyledir:

gas: 45
books: 25
food: 20

Eğer hiçbir kategori 20 değerine ulaşmazsa, hiçbir şey yazdırmayın.

Kopya kağıdı

Varsayılan olarak, eksik hash anahtarları nil döndürür. Bunun yerine farklı bir varsayılan değer döndürmek için Hash.new(default) kullanın:

scores = Hash.new(0)
puts scores["Alice"]   # 0

Bu, sayaçları temiz hale getirir — artırmadan önce nil kontrolü yapmaya gerek kalmaz:

counts = Hash.new(0)
["a", "b", "a"].each do |letter|
  counts[letter] += 1
end
# {"a"=>2, "b"=>1}

Not: eksik bir anahtarı okumak onu kaydetmez. Anahtar yalnızca bir değer atadığınızda (örneğin +=) eklenir.

Kendin dene

entries = gets.chomp.split(",")

# YAPILACAKLAR: totals = Hash.new(0); kategori başına tutarı biriktir;
#               ardından toplamı >= 20 olan kategorileri, toplama göre azalan şekilde yazdır
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