Menu
CoddyTech

sort_by, min_by, max_by

Teil des Abschnitts Logik und Ablauf der Ruby-Journey von Coddy. Lektion 26 von 56.

Sie kennen bereits sort, min und max. Die _by-Versionen geben Ihnen die Kontrolle darüber, was verglichen werden soll – perfekt zum Sortieren strukturierter Daten.

sort_by nimmt einen Block entgegen; der Block gibt den Wert zurück, der für jedes Element verglichen werden soll:

words = ["banana", "hi", "hello"]
by_length = words.sort_by { |w| w.length }
puts by_length.inspect   # ["hi", "hello", "banana"]

Für eine absteigende Reihenfolge negieren Sie den Vergleichsschlüssel, -w.length für Zahlen, oder rufen Sie reverse für das Ergebnis auf.

min_by und max_by geben das einzelne Element mit dem kleinsten / größten Wert des Blocks zurück:

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

Die Kurzschreibweise funktioniert ebenfalls: words.sort_by(&:length).

challenge icon

Aufgabe

Mittel

Das Array products ist gegeben, wobei jedes Element ein Hash mit :name, :price und :quantity ist. Der Lagerwert jedes Produkts ist price * quantity.

Gib drei Zeilen aus:

  1. Namen sortiert nach Lagerwert absteigend, verbunden mit , (verwende sort_by auf dem abgeleiteten Wert)
  2. Der Name des Produkts mit der höchsten Menge unter den Artikeln mit einem Preis unter 5 (verwende max_by auf einer gefilterten Liste)
  3. Der Name des günstigsten Produkts, dessen Menge mindestens 10 beträgt (verwende min_by auf einer gefilterten Liste)

Für das Standard-Array ist die Ausgabe:

cheese, milk, bread, apple
bread
bread

Probier es selbst

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 }
]

# TODO: sort_by Lagerwert absteigend; max_by Menge (Preis < 5); min_by Preis (Menge >= 10)
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablauf

Übe selbstständig: Online-Ruby-Compiler