Filtrer par genre
Fait partie de la section Logique et flux du Journey Ruby de Coddy. Leçon 31 sur 56.
Ajoutez l’option 3. Filter By Genre. L’utilisateur saisit un genre et le programme répertorie tous les livres de ce genre exact, avec une correspondance sensible à la casse cette fois-ci.
Vous signalerez également un décompte, en utilisant count du chapitre précédent.
Défi
FacileÉtendez la boucle du menu. Lorsque le choix est "3" :
printl'inviteGenre:et lisez-laselectles livres dont le:genrecorrespond exactement à la saisie- Affichez une ligne par correspondance :
<title> by <author> - Après la liste, affichez
Total: <n>oùnest le nombre de correspondances (utilisezcountoumatches.length)
Conservez toutes les branches précédentes intactes.
Pour des entrées ajoutant deux livres de Fantasy et un livre de Sci-Fi, puis en filtrant par Fantasy et en quittant, le bloc de filtrage doit afficher les deux livres de fantasy et Total: 2.
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!"
elsif choice == "2"
print "Search title: "
query = gets.chomp
matches = library.select { |b| b[:title].downcase.include?(query.downcase) }
if matches.empty?
puts "No matches."
else
matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
end
end
# TODO : gérer choice == "3", demander le genre,
# sélectionner les livres correspondants, afficher chacun, puis "Total : <n>"
end
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
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - Tisseur de chaînes4Blocs, Procs et Lambdas
Qu'est-ce qu'un bloc ?do..end ou accoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes, 2e partie
Hash.new avec valeurs par défautParcourir les hashesHashes imbriquésFusionner et transformerRécapitulatif - Compteur de fréquences10Projet - Dossiers des étudiants
Présentation du projetAjouter un étudiant2Plages
Qu’est-ce qu’une plage ?Méthodes des plagesPlages dans Case / WhenRécapitulatif - Exercices sur les plages5Puissance des Enumerable
Select et RejectChaînage de MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Pipeline de données3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir les tableaux 2DMotifs courants en 2DRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Vue d’ensemble du projetAjouter un livreEntraînez-vous par vous-même : Compilateur Ruby en ligne