ממיר נתונים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 56 מתוך 56.
אתגר הסיום: עצבו מחדש מערך נתונים לדוח סיכום. שלבו סינון, מיפוי, קיבוץ, טיפול בשגיאות והגדרת מתודה לתוכנית אחת.
אתגר
בינונינתון המערך students. כל רשומה היא hash עם :id, :grades (מערך של מספרים שלמים, שיכול להיות ריק), ו-:subjects (מערך של מחרוזות).
הגדירו מתודה transform_dataset(students) שמחזירה hash עם שני מפתחות:
:qualified_ids: מערך ממוין של:idשל תלמידים שיש להם לפחות ציון אחד, וכל הציונים שלהם גבוהים ממש מ-70(השתמשו ב-all?).:subject_counts: hash שממפה כל מקצוע שלמדו התלמידים הכשירים למספר התלמידים הכשירים שלומדים אותו.
אם מערך :grades של תלמיד ריק, הוא אינו כשיר; דלגו עליו בשקט.
לאחר מכן קראו למתודה והדפיסו:
- את מזהי התלמידים הכשירים כשהם מחוברים באמצעות
,, עם הקידומתQualified:. אם אין כאלה, הדפיסוQualified: (none). - שורה אחת לכל מקצוע (בסדר אלפביתי) בפורמט
<subject>: <count>.
עבור students כברירת המחדל, הפלט הוא:
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1נסו בעצמכם
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 מזהי התלמידים העומדים בתנאים ואת מספר התלמידים בכל מקצוע
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין