Menu
Coddy logo textTech

Hash Yapıları Üzerinde Yineleme

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

Hash'ler sayılabilir (enumerable) yapılardır, bu nedenle tıpkı diziler gibi üzerlerinde döngü kurabilirsiniz. Ne istediğinize bağlı olarak üç yaygın desen vardır.

each size hem anahtarı hem de değeri verir:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key yalnızca anahtarları gezer:

prices.each_key { |k| puts k }   # elma, ekmek, süt

each_value yalnızca değerleri gezer:

prices.each_value { |v| puts v }   # 1, 3, 4

Ve geçen bölümde gördüğünüz her Enumerable metodu (map, select, reduce) hash'ler üzerinde de çalışır. Her yinelemede sadece bir anahtar/değer çifti (veya 2 elemanlı bir dizi) alırsınız:

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Görev

Orta

Bir fiyat listesine indirim uyguluyorsunuz. prices hash'i verilmiştir (öğe sembolü => fiyat tamsayısı).

Tek bir girdi satırı okuyun: %50 indirim uygulanacak öğelerin virgülle ayrılmış bir listesi (hash'teki sembollerle ad olarak eşleşen).

Sırasıyla şunları yazdırın:

  1. Öğe başına <item>: $<final_price> biçiminde bir satır; burada nihai fiyat, öğe indirim listesindeyse indirimli değer, aksi takdirde orijinal değerdir. each ile yineleyin. Öğeler orijinal sıralarını korur. İndirim için tamsayı bölmesi kullanın (price / 2).
  2. Was: $<n>: orijinal toplam (values.sum kullanın)
  3. Now: $<n>: indirim sonrası toplam
  4. Nihai fiyatı hâlâ 2 üzerinde olan öğelerin adları, , ile birleştirilmiş olarak (yeni hash üzerinde select + keys kullanın)

Varsayılan hash ile bread,milk girdisi için çıktı şudur:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Kendin dene

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: each ile final-price hash'ini oluştur; satırları, toplamları, pahalı öğeleri 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

Kendi başına pratik yap: Online Ruby derleyicisi