Menu
Coddy logo textTech

Rechercher par titre

Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 30 sur 56.

Ajoutez l'option 2. Search By Title. L'utilisateur saisit un terme de recherche, et le programme affiche chaque livre dont le titre contient ce terme, sans tenir compte de la casse.

C'est ici que select du chapitre précédent porte ses fruits, un seul bloc, pas de boucle manuelle :

matches = library.select do |book|
  book[:title].downcase.include?(query.downcase)
end
challenge icon

Défi

Facile

Étendez la boucle du menu. Lorsque le choix est "2" :

  1. print l'invite Search title: et lisez la requête
  2. Utilisez select pour trouver les livres dont le titre (insensible à la casse) inclut la requête
  3. S'il n'y a pas de correspondance, affichez No matches.
  4. Sinon, affichez une ligne par correspondance dans ce format : <title> by <author>

Conservez les comportements 1 (Add Book) et 5 (Exit) des leçons précédentes.

Pour les entrées 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, puis 5, le bloc de sortie correspondant ressemble à ceci :

Choose an option: Search title: The Hobbit by Tolkien

Aide-mémoire

Utilisez select avec downcase.include? pour une recherche de titre insensible à la casse :

matches = library.select do |book|
  book[:title].downcase.include?(query.downcase)
end

Affichez les résultats ou un message de repli :

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

Essayez vous-même

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: gérer choice == "2", demander la requête, sélectionner les livres correspondants,
  # afficher "No matches." ou une ligne par correspondance : "<title> by <author>"
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux