Menu
Coddy logo textTech

Buscar por Título

Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 30 de 56.

Adicione a opção 2. Search By Title. O usuário digita um termo de busca, e o programa imprime cada livro cujo título contém esse termo, sem diferenciar maiúsculas de minúsculas.

É aqui que o select do capítulo anterior se paga, um bloco, sem loop manual:

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

Desafio

Fácil

Estenda o loop do menu. Quando a escolha for "2":

  1. print o prompt Search title: e leia a consulta
  2. Use select para encontrar livros cujo título (insensível a maiúsculas e minúsculas) inclua a consulta
  3. Se não houver correspondências, imprima No matches.
  4. Caso contrário, imprima uma linha por correspondência neste formato: <title> by <author>

Mantenha os comportamentos de 1 (Add Book) e 5 (Exit) das lições anteriores.

Para as entradas 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, e depois 5, o bloco de saída correspondente se parece com:

Choose an option: Search title: The Hobbit by Tolkien

Folha de consulta

Use select com downcase.include? para busca de título sem diferenciar maiúsculas e minúsculas:

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

Imprima os resultados ou uma mensagem de fallback:

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

Experimente você mesmo

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: tratar choice == "2", solicitar consulta, selecionar livros correspondentes,
  # imprimir "No matches." ou uma linha por correspondência: "<title> by <author>"
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo