Transformador de datos
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 56 de 56.
El desafío final: transforma un conjunto de datos en un informe resumido. Combina filtrado, mapeo, agrupación, manejo de errores y definición de métodos en un solo programa.
Desafío
IntermedioSe proporciona el arreglo students. Cada entrada es un hash con :id, :grades (un arreglo de enteros, posiblemente vacío) y :subjects (un arreglo de cadenas).
Define un método transform_dataset(students) que devuelva un hash con dos claves:
:qualified_ids: arreglo ordenado de los:idde los estudiantes que tienen al menos una calificación y cuyas calificaciones son todas estrictamente mayores que70(usaall?).:subject_counts: un hash que asocia cada asignatura cursada por los estudiantes que cumplen los requisitos con la cantidad de estudiantes que cumplen los requisitos y la cursan.
Si el arreglo :grades de un estudiante está vacío, este no cumple los requisitos; omítelo silenciosamente.
Después, llama al método e imprime:
- Los identificadores de los estudiantes que cumplen los requisitos, unidos con
,y precedidos porQualified:. Si no hay ninguno, imprimeQualified: (none). - Una línea por asignatura (ordenadas alfabéticamente) con el formato
<subject>: <count>.
Para el students predeterminado, la salida es:
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1Pruébalo tú mismo
students = [
{ id: "S1", grades: [85, 92, 78], subjects: ["math", "physics"] },
{ id: "S2", grades: [65, 80, 90], subjects: ["math", "biology"] },
{ id: "S3", grades: [], subjects: ["art"] },
{ id: "S4", grades: [88, 95], subjects: ["math", "biology", "history"] },
{ id: "S5", grades: [70, 75], subjects: ["chemistry"] }
]
# TODO: def transform_dataset(students), return { qualified_ids:, subject_counts: }
# TODO: imprime los IDs calificados y los conteos de asignaturas
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
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datosPractica por tu cuenta: Compilador de Ruby online