Marquer comme lu
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 32 sur 56.
Ajoutez la dernière option, 4. Mark As Read. L'utilisateur saisit un titre exact et le programme fait basculer la clé :read de ce livre de false à true.
Pour trouver le livre, utilisez find : il renvoie le premier élément correspondant au bloc, ou nil lorsque rien ne correspond :
book = library.find { |b| b[:title] == query }Si book est nil, indiquez qu'aucun livre n'a été trouvé. Sinon, modifiez-le sur place ; les hashs Ruby partagent leur identité à l'intérieur du tableau, donc la mise à jour de book[:read] met également à jour l'entrée stockée dans library.
Défi
FacileÉtendez la boucle du menu avec la branche "4" :
printl'inviteTitle:et lisez la saisie- Utilisez
findpour localiser le livre avec ce titre exact - Si aucune correspondance n'est trouvée, affichez
Not found. - Sinon, définissez
book[:read] = trueet affichezMarked as read!
Maintenez le fonctionnement de toutes les branches précédentes.
Pour les entrées qui ajoutent The Hobbit, le marquent comme lu, puis quittent, le bloc de marquage affiche :
Choose an option: Title: Marked as read!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
elsif choice == "3"
print "Genre: "
genre = gets.chomp
matches = library.select { |b| b[:genre] == genre }
matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
puts "Total: #{matches.length}"
end
# À FAIRE : gérer choice == "4", trouver par titre exact,
# définir book[:read] = true, afficher "Marked as read!" ou "Not found."
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 - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir des tableaux 2DModèles 2D courantsRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Présentation du projetAjouter un livreEntraînez-vous par vous-même : Compilateur Ruby en ligne