Datentransformator
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 56 von 56.
Die Abschlussaufgabe: Forme einen Datensatz in einen Übersichtsbericht um. Kombiniere Filtern, Zuordnen, Gruppieren, Fehlerbehandlung und die Definition von Methoden in einem Programm.
Aufgabe
MittelDas Array students ist gegeben. Jeder Eintrag ist ein Hash mit :id, :grades (ein möglicherweise leeres Array von Ganzzahlen) und :subjects (ein Array von Zeichenketten).
Definiere eine Methode transform_dataset(students), die einen Hash mit zwei Schlüsseln zurückgibt:
:qualified_ids: sortiertes Array der:ids von Studierenden, die mindestens eine Note haben und bei denen all Noten strikt über70liegen (verwendeall?).:subject_counts: ein Hash, der jedes von den qualifizierten Studierenden belegte Fach der Anzahl der qualifizierten Studierenden zuordnet, die es belegen.
Wenn das :grades-Array eines Studierenden leer ist, ist die Person nicht qualifiziert; überspringe sie stillschweigend.
Rufe anschließend die Methode auf und gib Folgendes aus:
- Die qualifizierten IDs, verbunden mit
,und mitQualified:als Präfix. Wenn keine vorhanden sind, gibQualified: (none)aus. - Eine Zeile pro Fach (alphabetisch sortiert) im Format
<subject>: <count>.
Für das standardmäßige students lautet die Ausgabe:
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1Probier es selbst
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: qualifizierte IDs und Fächeranzahlen ausgeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler