Menu
Coddy logo textTech

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)
end
challenge icon

Aufgabe

Einfach

Erweitern Sie die Menüschleife. Wenn die Auswahl "2" ist:

  1. print Sie die Eingabeaufforderung Search title: und lesen Sie die Abfrage ein
  2. Verwenden Sie select, um Bücher zu finden, deren Titel (unabhängig von Groß- und Kleinschreibung) die Abfrage enthält
  3. Wenn keine Treffer vorhanden sind, geben Sie No matches. aus
  4. 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 Tolkien

Spickzettel

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)
end

Ergebnisse oder eine Fallback-Nachricht ausgeben:

if matches.empty?
  puts "No matches."
else
  matches.each { |book| puts "#{book[:title]} by #{book[:author]}" }
end

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!"
  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
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 & Programmfluss