データトランスフォーマー
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 56/56。
最終課題では、データセットをサマリーレポートに再構成します。フィルタリング、マッピング、グルーピング、エラーハンドリング、およびメソッド定義を1つのプログラムに組み合わせます。
チャレンジ
中級配列 students が与えられています。各エントリは :id、:grades(整数の配列、空の場合あり)、および :subjects(文字列の配列)を持つハッシュです。
2つのキーを持つハッシュを返すメソッド transform_dataset(students) を定義してください:
:qualified_ids:少なくとも1つの成績を持ち、かつすべての成績が70を厳密に超えている(all?を使用)生徒の:idをソートした配列。:subject_counts:対象となる生徒が履修している各科目を、その科目を履修している対象生徒の数にマッピングしたハッシュ。
生徒の :grades 配列が空の場合、その生徒は対象外(not qualified)として、静かにスキップしてください。
次に、メソッドを呼び出して以下を出力してください:
- 対象となるIDを
,で連結し、先頭にQualified:を付けたもの。対象者がいない場合は、Qualified: (none)と出力してください。 - 各科目ごとに1行ずつ(アルファベット順にソート)、
<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) を定義し、{ qualified_ids:, subject_counts: } を返す
# TODO: 条件を満たすID(qualified IDs)と科目ごとの数(subject counts)を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。