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)
endDesafío
FácilExtiende el bucle del menú. Cuando la opción sea "2":
printel mensajeSearch title:y lee la consulta- Usa
selectpara encontrar libros cuyo título (insensible a mayúsculas y minúsculas) incluya la consulta - Si no hay coincidencias, imprime
No matches. - 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 TolkienHoja 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)
endImprime los resultados o un mensaje alternativo:
if matches.empty?
puts "No matches."
else
matches.each { |book| puts "#{book[:title]} by #{book[:author]}" }
endPrué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
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline3Arreglos 2D
Conceptos básicos de arreglos 2DAcceso a elementos 2DIteración sobre arreglos 2DPatrones comunes en 2DResumen - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libro