Nach Genre filtern
Teil des Abschnitts Logik und Ablauf der Ruby-Journey von Coddy. Lektion 31 von 56.
Füge die Option 3. Filter By Genre hinzu. Der Benutzer gibt ein Genre ein, und das Programm listet jedes Buch in genau diesem Genre auf; diesmal wird zwischen Groß- und Kleinschreibung unterschieden.
Sie werden außerdem eine Anzahl melden und dabei count aus dem vorherigen Kapitel verwenden.
Aufgabe
EinfachErweitere die Menüschleife. Wenn die Auswahl "3" lautet:
- Gib die Aufforderung
printmitGenre:aus und lies sie ein selectBücher aus, deren:genreexakt der Eingabe entspricht- Gib pro Treffer eine Zeile aus:
<title> by <author> - Gib nach der Liste
Total: <n>aus, wobeindie Anzahl der Treffer ist (verwendecountodermatches.length)
Lass alle vorherigen Zweige unverändert.
Bei Eingaben, die zwei Fantasy-Bücher und ein Sci-Fi-Buch hinzufügen, anschließend nach Fantasy filtern und das Programm beenden, sollte der Filterblock beide Fantasy-Bücher und Total: 2 ausgeben.
Probier es selbst
library = []
loop do
puts "--- Library Manager ---"
puts "1. Add Book"
puts "2. Search By Title"
puts "3. Filter By Genre"
puts "4. Mark As Read"
puts "5. Exit"
print "Choose an option: "
choice = gets.chomp
if choice == "5"
puts "Goodbye!"
break
elsif choice == "1"
print "Title: "
title = gets.chomp
print "Author: "
author = gets.chomp
print "Genre: "
genre = gets.chomp
library.push({ title: title, author: author, genre: genre, read: false })
puts "Book added!"
elsif choice == "2"
print "Search title: "
query = gets.chomp
matches = library.select { |b| b[:title].downcase.include?(query.downcase) }
if matches.empty?
puts "No matches."
else
matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
end
end
# TODO: Auswahl == "3" verarbeiten, nach Genre fragen,
# passende Bücher auswählen, jedes ausgeben, dann "Gesamt: <n>"
end
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 – Notenklassifizierer32D-Arrays
Grundlagen von 2D-ArraysZugriff auf 2D-ElementeDurchlaufen von 2D-ArraysGängige 2D-MusterRückblick – Matrixoperationen6Projekt – Bibliotheksverwaltung
ProjektübersichtBuch hinzufügenÜbe selbstständig: Online-Ruby-Compiler