Nach Titel suchen
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 30 von 56.
Fügen Sie die Option 2. Search By Title hinzu. Der Benutzer gibt einen Suchbegriff ein, und das Programm gibt jedes Buch aus, dessen Titel diesen Begriff enthält (unabhängig von der Groß- und Kleinschreibung).
Hier zahlt sich select aus dem vorherigen Kapitel aus, ein Block, keine manuelle Schleife:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
endAufgabe
EinfachErweitern Sie die Menüschleife. Wenn die Auswahl "2" ist:
printSie die EingabeaufforderungSearch title:und lesen Sie die Abfrage ein- Verwenden Sie
select, um Bücher zu finden, deren Titel (unabhängig von Groß- und Kleinschreibung) die Abfrage enthält - Wenn keine Treffer vorhanden sind, geben Sie
No matches.aus - Andernfalls geben Sie pro Treffer eine Zeile in diesem Format aus:
<title> by <author>
Behalten Sie die Verhaltensweisen für 1 (Add Book) und 5 (Exit) aus den vorherigen Lektionen bei.
Für die Eingaben 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, und dann 5, sieht der entsprechende Ausgabe-Block wie folgt aus:
Choose an option: Search title: The Hobbit by TolkienSpickzettel
Verwenden Sie select mit downcase.include? für eine Titelsuche ohne Berücksichtigung der Groß-/Kleinschreibung:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
endErgebnisse oder eine Fallback-Nachricht ausgeben:
if matches.empty?
puts "No matches."
else
matches.each { |book| puts "#{book[:title]} by #{book[:author]}" }
endProbier 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!"
end
# TODO: handle choice == "2", nach Suchbegriff fragen, passende Bücher auswählen,
# gebe "No matches." aus oder eine Zeile pro Treffer: "<title> by <author>"
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer32D-Arrays
2D-Array GrundlagenZugriff auf 2D-ElementeIterieren über 2D-ArraysGängige 2D-MusterZusammenfassung – Matrix-Operationen6Projekt - Bibliotheksverwaltung
ProjektübersichtBuch hinzufügen