【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】辞書型(Dictionary)の基本的な使い方から応用的な使い方まで徹底解説!

【Swift】辞書型(Dictionary)の基本的な使い方から応用的な使い方まで徹底解説!
ふくしま

この記事では、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エンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次