Listar por curso
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 52 de 56.
Agrega un método que encuentre a cada estudiante inscrito en un curso determinado y devuelva sus nombres como un arreglo. Este es el tipo de cadena select/map que ya has practicado.
Desafío
FácilAgrega un método list_by_course(course) que devuelva un array con los nombres de los estudiantes cuyo array :courses incluya course. Los nombres deben aparecer en el orden de inserción; si nadie está inscrito, devuelve [].
Reemplaza el bloque de prueba con:
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").inspectSalida esperada:
Student 'Alice' added.
Student 'Bob' added.
Student 'Cara' added.
["Alice", "Bob"]
["Alice", "Cara"]
[]Hoja de referencia
Utiliza select + map para filtrar estudiantes por un campo y devolver los nombres:
def list_by_course(course)
@students.select { |s| s[:courses].include?(course) }
.map { |s| s[:name] }
endPruébalo tú mismo
$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), devolver un array de nombres inscritos en `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
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 Pipeline