集計レポート
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部。レッスン 53/56。
最後の機能です。1つのカテゴリーだけでなく、クイズ全体を実行し、最後にカテゴリーごとの概要を表示します。
この章では、反復処理のためのタプルの分割代入、文字列の章で学んだ寛容な採点、辞書の章で学んだデフォルト値付きの添字アクセスができる辞書、決定論的な出力を得るためのソート済み反復処理をすべて同時に活用します。
カテゴリごとのカウンターを、並行する2つの辞書として作成します。
var totals: [String: Int] = [:]
var rights: [String: Int] = [:]すべての質問でtotals[cat, default: 0] += 1をインクリメントし、正解した場合にのみrights[cat, default: 0]をインクリメントします。最後に、カテゴリをアルファベット順に並べてレポートを出力します。
チャレンジ
中級前のステップと同じ、この6問の問題バンクを使ってプログラムを始めましょう。
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("math", "Value of pi to 2 decimals?", "3.14"),
("geo", "Capital of France?", "Paris"),
("geo", "Largest ocean?", "Pacific"),
("science", "Color of grass?", "green"),
("science", "H2O is?", "water")
]stdin から6つの回答を、問題バンクと同じ順序で1行に1つずつ読み込みます。寛容な採点方式を使ってください。
次の順序で出力します。
- カテゴリごとに1行ずつ、アルファベット順に、
<category>: <right>/<total>の形式で出力 - 実行全体の合計を示す最後の1行:
Total: <right>/<total>
入力が 4 / 3.14 / Paris / Atlantic / green / WATER の場合、出力は次のとおりです。
geo: 1/2
math: 2/2
science: 2/2
Total: 5/6自分で試してみよう
let questions: [(String, String, String)] = [
("math", "2 + 2?", "4"),
("math", "Value of pi to 2 decimals?", "3.14"),
("geo", "Capital of France?", "Paris"),
("geo", "Largest ocean?", "Pacific"),
("science", "Color of grass?", "green"),
("science", "H2O is?", "water")
]
// TODO: 6 件の回答を読み取り、寛容に採点し、カテゴリごとの問題数と正解数を集計する;
// ソート済みの集計行と Total を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド