辞書の反復処理
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 15/56。
for を使って辞書を反復処理すると、各ペアの両方の要素がタプルとして渡されます:
let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
print("\(item) costs \(price)")
}反復の順序は保証されません。ループを2回実行すると、エントリが異なる順序で表示されることがあります。順序が重要な場合は、まずソートを行います:
for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
print("\(item): \(price)")
}sorted(by:) 内の式はクロージャです。これは2つのペア($0 と $1)をそれぞれの key プロパティで比較します。クロージャについては後の章で詳しく説明しますが、今はこれを辞書をソートするためのレシピとして扱ってください。
さらに2つの便利なプロパティ:.keys と .values を使用すると、キーのみ、または値のみのコレクションを取得できます。
チャレンジ
簡単scores ディクショナリは、生徒の名前を Int 型のスコアにマッピングします。以下を出力してください:
- 各エントリを
<name>: <score>の形式で、名前のアルファベット順にソートして、1行に1つずつ出力します - 全スコアの合計を
Sum: <total>として出力します(.valuesとreduceを使用してください) - スコアが
70より大きいエントリの数をAbove 70: <count>として出力します
デフォルトのディクショナリの場合、出力は以下のようになります:
Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3チートシート
for を使用して辞書を反復処理し、キーと値のタプルを取得します:
let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
print("\(item) costs \(price)")
}反復の順序は保証されません。順序が重要な場合は、まずソートしてください:
for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
print("\(item): \(price)")
}.keys や .values を使用して、キーまたは値のみにアクセスします:
prices.keys // キーのコレクション
prices.values // 値のコレクション自分で試してみよう
let scores: [String: Int] = [
"Alice": 85, "Bob": 60, "Cara": 90, "Dan": 72
]
// TODO: ソートされたエントリを出力; .values に対して reduce で合計を算出; 70 を超えるものをカウント
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。