Menu
Coddy logo textTech

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]     # Cara

Kısa yazım da çalışır: words.sort_by(&:length).

challenge icon

Görev

Orta

products 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:

  1. Stok değerine göre azalan sırada sıralanmış, , ile birleştirilmiş isimler (türetilmiş değer üzerinde sort_by kullanın)
  2. Fiyatı 5'in altında olan ürünler arasında en yüksek miktara sahip ürünün adı (filtrelenmiş bir liste üzerinde max_by kullanın)
  3. Miktarı en az 10 olan en ucuz ürünün adı (filtrelenmiş bir liste üzerinde min_by kullanın)

Varsayılan dizi için çıktı şöyledir:

cheese, milk, bread, apple
bread
bread

Kendin 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)
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