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
EinfachErweitere die Menüschleife. Wenn die Auswahl "2" lautet:
- Gib mit
printdie EingabeaufforderungSearch title:aus und lies die Suchanfrage ein - Verwende
select, um Bücher zu finden, deren Titel (ohne Beachtung der Groß- und Kleinschreibung) die Suchanfrage enthält - Wenn es keine Treffer gibt, gib
No matches.aus - Gib andernfalls für jeden Treffer eine Zeile in diesem Format aus:
<title> by <author>
Behalte das Verhalten für 1 (Buch hinzufügen) und 5 (Beenden) aus den vorherigen Lektionen bei.
Für die Eingaben 1, The Hobbit, Tolkien, Fantasy, 2, hobbit und anschließend 5 sieht der entsprechende Ausgabeblock so aus:
Choose an option: Search title: The Hobbit by TolkienProbier 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
Ü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