Transformateur de données
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 56 sur 56.
Le défi final consiste à transformer un jeu de données en rapport récapitulatif. Combine le filtrage, la transformation, le regroupement, la gestion des erreurs et la définition de méthodes en un seul programme.
Défi
MoyenLe tableau students est fourni. Chaque entrée est un hash avec :id, :grades (un tableau d’entiers, éventuellement vide) et :subjects (un tableau de chaînes).
Définissez une méthode transform_dataset(students) qui renvoie un hash avec deux clés :
:qualified_ids: tableau trié des:iddes étudiants qui ont au moins une note et dont toutes les notes sont strictement supérieures à70(utilisezall?).:subject_counts: hash associant chaque matière suivie par les étudiants qualifiés au nombre d’étudiants qualifiés qui la suivent.
Si le tableau :grades d’un étudiant est vide, celui-ci n’est pas qualifié ; ignorez-le sans afficher de message.
Appelez ensuite la méthode et affichez :
- Les identifiants qualifiés joints par
,, précédés deQualified:. S’il n’y en a aucun, affichezQualified: (none). - Une ligne par matière (triée par ordre alphabétique) au format
<subject>: <count>.
Pour le students par défaut, la sortie est :
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1Essayez vous-même
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: afficher les IDs qualifiés et les comptages de sujets
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éesEntraînez-vous par vous-même : Compilateur Ruby en ligne