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}"
endeach_key yalnızca anahtarları gezer:
prices.each_key { |k| puts k } # elma, ekmek, süteach_value yalnızca değerleri gezer:
prices.each_value { |v| puts v } # 1, 3, 4Ve 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}Görev
OrtaBir 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:
- Öğe başına
<item>: <item>: $<final_price>lt;final_price>biçiminde bir satır; burada nihai fiyat, öğe indirim listesindeyse indirimli değer, aksi takdirde orijinal değerdir.eachile yineleyin. Öğeler orijinal sıralarını korur. İndirim için tamsayı bölmesi kullanın (price / 2). Was: Was: $<n>lt;n>: orijinal toplam (values.sumkullanın)Now: Now: $<n>lt;n>: indirim sonrası toplam- Nihai fiyatı hâlâ
2üzerinde olan öğelerin adları,,ile birleştirilmiş olarak (yeni hash üzerindeselect+keyskullanın)
Varsayılan hash ile bread,milk girdisi için çıktı şudur:
apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheeseKendin 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
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
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı