Menu
Coddy logo textTech

Buscar por título

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 30 de 56.

Agrega la opción 2. Search By Title. El usuario escribe un término de búsqueda y el programa imprime cada libro cuyo título contenga ese término, sin distinguir entre mayúsculas y minúsculas.

Aquí es donde select del capítulo anterior da sus frutos, un bloque, sin bucle manual:

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

Desafío

Fácil

Extiende el bucle del menú. Cuando la opción sea "2":

  1. print el mensaje Search title: y lee la consulta
  2. Usa select para encontrar libros cuyo título (insensible a mayúsculas y minúsculas) incluya la consulta
  3. Si no hay coincidencias, imprime No matches.
  4. De lo contrario, imprime una línea por cada coincidencia en este formato: <title> by <author>

Mantén los comportamientos de 1 (Add Book) y 5 (Exit) de las lecciones anteriores.

Para las entradas 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, y luego 5, el bloque de salida correspondiente se ve así:

Choose an option: Search title: The Hobbit by Tolkien

Hoja de referencia

Usa select con downcase.include? para una búsqueda de títulos que no distinga entre mayúsculas y minúsculas:

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

Imprime los resultados o un mensaje alternativo:

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

Pruébalo tú mismo

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: manejar choice == "2", solicitar consulta, seleccionar libros coincidentes,
  # imprimir "No matches." o una línea por coincidencia: "<title> by <author>"
end
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo