Hash'ler Üzerinde Yineleme
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 34 / 56.
Hash'ler numaralandırılabilir olduğundan, tıpkı diziler gibi bunlar üzerinde yineleme yapabilirsiniz. Ne yapmak istediğinize bağlı olarak üç yaygın kalıp vardır.
each sana 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 üzerinde dolaşır:
prices.each_key { |k| puts k } # elma, ekmek, süteach_value yalnızca değerler üzerinde gezinir:
prices.each_value { |v| puts v } # 1, 3, 4Geçen bölümde gördüğün her Enumerable yöntemi, map, select, reduce: hash'ler üzerinde de çalışır. Her yinelemede yalnızca bir anahtar/değer çifti (veya 2 öğeli bir dizi) alırsın:
prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}Görev
OrtaBir fiyat listesine indirim uyguluyorsun. prices hash'i veriliyor (ürün sembolü => fiyat tamsayısı).
Bir satır girdi oku: hash'teki sembollerle ada göre eşleşen, %50 indirim uygulanacak ürünlerin virgülle ayrılmış listesi.
Şu sırayla yazdır:
<item>: $<final_price>biçiminde her ürün için bir satır; burada son fiyat, ürün indirim listesinde yer alıyorsa indirimli değer, aksi hâlde orijinal değerdir.eachile yinele. Ürünler özgün sıralarını korur. İndirim için tamsayı bölmesi kullan (price / 2).Was: $<n>: orijinal toplam (values.sumkullan)Now: $<n>: indirim sonrası toplam- Son fiyatı hâlâ
2değerinden büyük olan ürünlerin adları;,ile birleştirilmiş olarak (yeni hash üzerindeselect+keyskullan)
Varsayılan hash ile bread,milk girdisi için çıktı şöyledir:
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
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