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] # CaraDie Kurzschreibweise funktioniert ebenfalls: words.sort_by(&:length).
Aufgabe
MittelDas 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:
- Namen sortiert nach Lagerwert absteigend, verbunden mit
,(verwendesort_byauf dem abgeleiteten Wert) - Der Name des Produkts mit der höchsten Menge unter den Artikeln mit einem Preis unter 5 (verwende
max_byauf einer gefilterten Liste) - Der Name des günstigsten Produkts, dessen Menge mindestens 10 beträgt (verwende
min_byauf einer gefilterten Liste)
Für das Standard-Array ist die Ausgabe:
cheese, milk, bread, apple
bread
breadProbier 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)
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
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler