カテゴリ: Swift 更新日: 2025/11/10

SwiftのSet(セット)入門|重複排除と高速検索・集合演算をわかりやすく解説!

Swift Set入門|重複排除と高速検索・集合演算(union/intersection)
Swift Set入門|重複排除と高速検索・集合演算(union/intersection)

先生と生徒の会話形式で理解しよう

生徒

「Swiftで、同じ値を重複して入れたくないときはどうすればいいですか?」

先生

「そんなときはSet(セット)というコレクション型を使うのが便利ですよ。SwiftのSetは、重複を自動で排除してくれます。」

生徒

「Setって、ArrayやDictionaryとはどう違うんですか?」

先生

「Setは順番を気にせず、素早く検索したいときや、重複を避けたいときに活躍します。今回はその特徴や使い方を丁寧に見ていきましょう。」

1. SwiftのSetとは?特徴を確認しよう

1. SwiftのSetとは?特徴を確認しよう
1. SwiftのSetとは?特徴を確認しよう

SwiftのSetは、重複する値を自動で排除するコレクション型です。「集合」という数学の概念と同じで、「同じ値は1つだけ」に保たれます。順番には意味がありません。

例えば、同じ名前を何回も入れたつもりでも、Setでは1回分しか記録されません。

2. Setの基本的な書き方と初期化方法

2. Setの基本的な書き方と初期化方法
2. Setの基本的な書き方と初期化方法

Setの定義は、Arrayと似ていますが、中身が重複しない点が大きな違いです。以下のように書きます。


var colors: Set<String> = ["赤", "青", "緑", "赤"]
print(colors)

このコードでは「赤」が2回入っていますが、Setは自動で重複を排除します。


["赤", "青", "緑"]

3. 要素の追加・削除・検索をしてみよう

3. 要素の追加・削除・検索をしてみよう
3. 要素の追加・削除・検索をしてみよう

Setの操作はとてもシンプルです。値の追加、削除、検索の方法を順に見てみましょう。

値を追加する


var fruits: Set = ["りんご", "バナナ"]
fruits.insert("みかん")
print(fruits)

値を削除する


fruits.remove("バナナ")
print(fruits)

値が含まれているか調べる(検索)


if fruits.contains("りんご") {
    print("りんごが含まれています")
}

りんごが含まれています

4. Setの高速な検索性能が便利な理由

4. Setの高速な検索性能が便利な理由
4. Setの高速な検索性能が便利な理由

SetはArrayよりも高速に検索ができます。なぜなら、Setは内部的にデータの管理を最適化していて、特定の値があるかどうかを一瞬で判断できるからです。

例えば、1万件のデータから「バナナ」があるかどうかを調べる場合、Arrayは順番に探しますが、Setならほぼ一発で見つかります。

5. Setの集合演算:合体や共通部分を調べよう

5. Setの集合演算:合体や共通部分を調べよう
5. Setの集合演算:合体や共通部分を調べよう

Setの最大の魅力は、「集合演算」ができることです。数学で習った集合と同じように、合体・共通部分・差を簡単に求められます。

合体(union)


let a: Set = [1, 2, 3]
let b: Set = [3, 4, 5]
let unionSet = a.union(b)
print(unionSet)

[1, 2, 3, 4, 5]

共通部分(intersection)


let commonSet = a.intersection(b)
print(commonSet)

[3]

差(subtracting)


let onlyA = a.subtracting(b)
print(onlyA)

[1, 2]

6. SetとArrayの違いを理解しよう

6. SetとArrayの違いを理解しよう
6. SetとArrayの違いを理解しよう

初心者が混乱しやすいのが、SetとArrayの違いです。以下のような違いがあります。

  • Array:順番がある、重複OK
  • Set:順番なし、重複NG、検索が速い

順番が重要ならArray、重複をなくしたい・検索を早くしたいならSetを選びましょう。

7. Setを活用する具体例

7. Setを活用する具体例
7. Setを活用する具体例

例えば、ユーザーが入力したキーワードに重複があっても無視したい場合や、ログイン履歴で同じIDを一回だけ記録したい場合にSetは便利です。

以下の例では、重複したIDを1つにまとめています。


let logins = ["user1", "user2", "user1", "user3"]
let uniqueLogins = Set(logins)
print(uniqueLogins)

["user1", "user2", "user3"]

8. Setの初期化方法と注意点

8. Setの初期化方法と注意点
8. Setの初期化方法と注意点

Setは、空の状態から初期化もできます。ただし、型を明示する必要があります。


var emptySet = Set<String>()
emptySet.insert("Swift")
print(emptySet)

["Swift"]

また、Arrayと混同しないように、Setに順番を期待しないことが大事です。

関連記事:
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎