Liste par cours
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 52 sur 56.
Ajoutez une méthode qui trouve chaque étudiant inscrit à un cours donné et retourne leurs noms sous forme de tableau. C'est le genre de chaîne select/map que vous avez déjà pratiquée.
Défi
FacileAjoutez une méthode list_by_course(course) qui retourne un tableau des noms des étudiants dont le tableau :courses inclut course. Les noms doivent apparaître dans l'ordre d'insertion ; si personne n'est inscrit, retournez [].
Remplacez le bloc de test par :
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Math"])
add_student("Cara", 19, ["Physics"])
puts list_by_course("Math").inspect
puts list_by_course("Physics").inspect
puts list_by_course("Art").inspectRésultat attendu :
Student 'Alice' added.
Student 'Bob' added.
Student 'Cara' added.
["Alice", "Bob"]
["Alice", "Cara"]
[]Aide-mémoire
Utilisez select + map pour filtrer les étudiants par un champ et retourner les noms :
def list_by_course(course)
@students.select { |s| s[:courses].include?(course) }
.map { |s| s[:name] }
endEssayez vous-même
$student_records = {}
def add_student(name, age, courses)
if $student_records.key?(name)
puts "Student '#{name}' already exists."
return
end
$student_records[name] = { age: age, grades: [], courses: courses }
puts "Student '#{name}' added."
end
def add_grade(name, grade)
unless $student_records.key?(name)
puts "Student '#{name}' not found."
return
end
$student_records[name][:grades] << grade
puts "Grade #{grade} added for '#{name}'."
end
def average_grade(name)
unless $student_records.key?(name)
puts "Student '#{name}' not found."
return nil
end
grades = $student_records[name][:grades]
return 0 if grades.empty?
grades.sum.to_f / grades.length
end
# TODO: def list_by_course(course), retourner un tableau des noms inscrits au cours `course`
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Math"])
add_student("Cara", 19, ["Physics"])
puts list_by_course("Math").inspect
puts list_by_course("Physics").inspect
puts list_by_course("Art").inspect
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 Pipeline