この記事では、Swift 5.9およびXcode 15を使用して、Swiftにおける辞書型(Dictionary)の操作について、基本から応用まで幅広く解説します。
この記事を読んで分かること…
・辞書型の基本的な作成方法
・要素の追加と更新の仕方
・要素の取得方法
・要素の削除方法
・辞書内でのループ処理の方法
・フィルタ、マップ、リデュース
辞書型とは
辞書型(Dictionary)は、キーと値のペアをコレクションとして格納するデータ構造です。各キーはその辞書内で一意であり、一つのキーは一つの値に関連付けられています。これにより、特定のキーを使用して迅速に値を検索することができます。
データを管理するための方法の一つとして配列があります。
配列については以下の記事で解説しているので、併せてご覧ください!
辞書の作成
概要
Swiftにおける辞書型の作成方法について説明します。空の辞書の作成や初期値を持つ辞書の作成方法をサンプルコードを通して学びます。
サンプルコード
// 空の辞書
var emptyDictionary: [String: Int] = [:]
// 初期値を持つ辞書
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8, "banana": 12]
サンプルコードの説明
◾️行 2: String
型のキーとInt
型の値を持つ空の辞書emptyDictionary
を宣言しています。辞書は[:]
を使用して空であることを示しています。
◾️行 5: String
型のキーとInt
型の値を持つ辞書fruitsCount
を宣言し、初期値として3つのエントリ(”apple”: 5, “orange”: 8, “banana”: 12)を持っています。これは各果物の名前をキーとし、その数を値として格納しています。
要素の追加と更新
概要
辞書に新しい要素を追加したり、既存の要素を更新する方法について解説します。
サンプルコード
import Foundation
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8]
// 要素の追加
fruitsCount["pear"] = 3
// 要素の更新
fruitsCount["apple"] = 10
サンプルコードの説明
◾️行 3: fruitsCount
という名前の辞書を宣言し、初期値として2つのエントリ(”apple”: 5, “orange”: 8)を設定しています。これにより、”apple”と”orange”というキーにそれぞれ5と8という値が関連付けられます。
◾️行 6: 辞書fruitsCount
に新しいエントリを追加しています。この行では、新しいキー"pear"
に対して値3
を設定しています。この操作により、辞書には新しいキーと値のペアが追加されます。
◾️行 9: 既存のエントリ(キーが”apple”)の値を更新しています。”apple”の値を10
に設定することで、”apple”の以前の値5
は新しい値10
に置き換えられます。
要素の取得
概要
辞書から特定のキーに対応する値を取得する方法について学びます。
サンプルコード
import Foundation
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8]
// 要素の取得
if let appleCount = fruitsCount["apple"] {
print("There are \(appleCount) apples.")
} else {
print("The apple count is not available.")
}
サンプルコードの説明
◾️行 3: String
型のキーとInt
型の値を持つ辞書fruitsCount
を宣言し、初期値として2つのエントリを持っています。
◾️行 6: オプショナルバインディングを用いて、キー"apple"
に対応する値を辞書から取得し、その値が存在する場合(nilでない場合)は変数appleCount
に格納します。
◾️行 7: appleCount
に値が存在する場合(つまり、”apple”のカウントが取得できた場合)、その数を含むメッセージを出力します。
◾️行 8-9: appleCount
に値が存在しない場合(つまり、辞書に”apple”というキーが存在しない場合)、”The apple count is not available.”というメッセージを出力します。
要素の削除
概要
辞書から特定の要素を削除する方法について説明します。
サンプルコード
import Foundation
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8, "banana": 12]
// 要素の削除
fruitsCount["banana"] = nil
サンプルコードの説明
◾️行 3: String
型のキーとInt
型の値を持つ辞書fruitsCount
を定義し、3つのエントリを初期値として持っています。各エントリは果物の名前をキーとし、その果物の数を値としています。
◾️行 6: 辞書fruitsCount
からキー”banana”に対応する要素を削除しています。Swiftでは、辞書の要素を削除するために、そのキーにnil
を割り当てることで実現します。
ループ処理
概要
辞書の各要素をループ処理する方法について解説します。
サンプルコード
import Foundation
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8, "banana": 12]
// ループ処理
for (fruit, count) in fruitsCount {
print("\(fruit): \(count)")
}
サンプルコードの説明
◾️行 3: String
型のキーとInt
型の値を持つ辞書fruitsCount
を宣言し、初期値として3つの果物名とその数量を持っています。
◾️行 6-7: fruitsCount
辞書の各要素についてループを行います。ループの各イテレーションでは、辞書からキー(fruit
)と値(count
)のペアを取り出し、それらを出力します。このfor-in
ループは辞書の各要素に対して実行され、キーと値のペアを使用して所定の操作(この場合は出力)を行います。
フィルタ、マップ、リデュース
概要
辞書に対するフィルタ、マップ、リデュースの高度な操作について学びます。
サンプルコード
import Foundation
var fruitsCount: [String: Int] = ["apple": 5, "orange": 8, "banana": 12]
// フィルタ: 値が8より大きい要素のみ取得
let filteredFruits = fruitsCount.filter { $0.value > 8 }
print(filteredFruits)
// マップ: 各要素の値を2倍にする
let doubledCounts = fruitsCount.mapValues { $0 * 2 }
print(doubledCounts)
// リデュース: 全ての果物の総数を計算
let totalFruits = fruitsCount.reduce(0) { $0 + $1.value }
print("Total fruits: \(totalFruits)")
サンプルコードの説明
◾️行 6: filter
メソッドを使って、fruitsCount
辞書から値が8より大きい要素のみを抽出しています。$0.value > 8
という条件を満たす要素だけがfilteredFruits
に格納されます。
◾️行 10: mapValues
メソッドを使って、fruitsCount
辞書の各要素の値を2倍にしています。$0 * 2
という操作が各値に適用され、結果はdoubledCounts
に格納されます。
◾️reduce
メソッドを使って、fruitsCount
辞書の全要素の値の合計を計算しています。初期値0
から始めて、各要素の値($1.value
)を加算していき、結果はtotalFruits
に格納されます。
まとめ
いかがでしたか?
この記事では、辞書型の操作方法を基本から応用まで解説しました。辞書型を利用すると、Swiftにおけるデータ管理の幅が広がるでしょう。
この記事が皆さんのお役に立てれば光栄です。ではまた次の記事でお会いしましょう〜
この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
コメント