sort_by, min_by, max_by
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 26 / 56.
Zaten sort, min ve max fonksiyonlarını biliyorsunuz. _by sürümleri, neyin karşılaştırılacağı konusunda size kontrol sağlar; yapılandırılmış verileri sıralamak için mükemmeldir.
sort_by bir blok alır; blok, her bir öğe için karşılaştırılacak değeri döndürür:
words = ["banana", "hi", "hello"]
by_length = words.sort_by { |w| w.length }
puts by_length.inspect # ["hi", "hello", "banana"]Azalan sıralama için, karşılaştırma anahtarını negatif yapın (sayılar için -w.length) veya sonuç üzerinde reverse metodunu çağırın.
min_by ve max_by, bloğun en küçük / en büyük değerine sahip olan tek öğeyi döndürür:
people = [
{ name: "Ada", age: 36 },
{ name: "Bob", age: 22 },
{ name: "Cara", age: 41 }
]
youngest = people.min_by { |p| p[:age] }
oldest = people.max_by { |p| p[:age] }
puts youngest[:name] # Bob
puts oldest[:name] # CaraKısa yazım da çalışır: words.sort_by(&:length).
Görev
Ortaproducts dizisi verilmiştir, her bir öğe :name, :price ve :quantity anahtarlarını içeren bir hash'tir. Her ürünün stok değeri price * quantity şeklindedir.
Üç satır yazdırın:
- Stok değerine göre azalan sırada sıralanmış,
,ile birleştirilmiş isimler (türetilmiş değer üzerindesort_bykullanın) - Fiyatı 5'in altında olan ürünler arasında en yüksek miktara sahip ürünün adı (filtrelenmiş bir liste üzerinde
max_bykullanın) - Miktarı en az 10 olan en ucuz ürünün adı (filtrelenmiş bir liste üzerinde
min_bykullanın)
Varsayılan dizi için çıktı şöyledir:
cheese, milk, bread, apple
bread
breadKendin dene
products = [
{ name: "milk", price: 3, quantity: 8 },
{ name: "apple", price: 1, quantity: 4 },
{ name: "cheese", price: 5, quantity: 6 },
{ name: "bread", price: 2, quantity: 12 }
]
# YAPILACAK: stok değerine göre azalan sırala; miktara göre en büyüğü (fiyat < 5); fiyata göre en küçüğü (miktar >= 10)
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ı