Transformator danych
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 56 z 56.
W ramach wyzwania końcowego przekształcisz zbiór danych w raport podsumowujący. Połącz filtrowanie, mapowanie, grupowanie, obsługę błędów i definiowanie metod w jednym programie.
Wyzwanie
ŚredniDana jest tablica students. Każdy element to hash z kluczami :id, :grades (tablica liczb całkowitych, która może być pusta) oraz :subjects (tablica ciągów znaków).
Zdefiniuj metodę transform_dataset(students), która zwraca hash z dwoma kluczami:
:qualified_ids: posortowana tablica wartości:iduczniów, którzy mają co najmniej jedną ocenę i wszystkie oceny ściśle powyżej70(użyjall?).:subject_counts: hash mapujący każdy przedmiot, którego uczą się zakwalifikowani uczniowie, na liczbę zakwalifikowanych uczniów, którzy się go uczą.
Jeśli tablica :grades ucznia jest pusta, uczeń nie kwalifikuje się — pomiń go bez komunikatu.
Następnie wywołaj metodę i wypisz:
- Zakwalifikowane identyfikatory połączone za pomocą
,, z prefiksemQualified:. Jeśli nie ma żadnego, wypiszQualified: (none). - Jeden wiersz dla każdego przedmiotu (w kolejności alfabetycznej) w formacie
<subject>: <count>.
Dla domyślnej tablicy students wynik to:
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1Spróbuj swoich sił
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: print identyfikatory zakwalifikowanych uczniów i liczby uczniów dla poszczególnych przedmiotów
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocenPoćwicz samodzielnie: Kompilator Ruby online