セット.insert() / remove() / contains()
| 対応: | Swift 1.0(2014) |
|---|
Swiftの『Set』は、重複のない要素のコレクションです。順序は保証されず、要素は『Hashable』プロトコルに準拠している必要があります。
構文
// セットの宣言と初期化
var set: Set<String> = ["五条悟", "虎杖悠仁", "伏黒恵"]
var emptySet = Set<Int>() // 空のセット
var set2: Set = ["a", "b", "c"] // 型推論
// 要素の存在確認
set.contains("五条悟") // true
メソッド一覧
| メソッド / プロパティ | 概要 |
|---|---|
| セット.insert(_:) | 要素を追加します。追加成功かどうかと、追加または既存の要素を返します。 |
| セット.remove(_:) | 指定した要素を削除し、削除した要素を Optional で返します。 |
| セット.removeAll() | 全要素を削除します。 |
| セット.contains(_:) | 要素が含まれるか Bool で返します。 |
| セット.count | 要素数を返します。 |
| セット.isEmpty | セットが空かどうかを Bool で返します。 |
| セット.update(with:) | 要素を追加・置換し、置き換えた古い要素を Optional で返します。 |
サンプルコード
sample_set_insert_remove.swift
// セットの作成
var members: Set<String> = ["五条悟", "虎杖悠仁", "伏黒恵"]
print("初期: \(members)")
// insert: 追加(戻り値でSuccess確認)
let (inserted, member) = members.insert("釘崎野薔薇")
print("釘崎野薔薇追加: \(inserted ? "成功" : "既に存在") - \(member)")
// 重複を追加しようとした場合
let (inserted2, _) = members.insert("五条悟")
print("五条悟再追加: \(inserted2 ? "成功" : "既に存在")")
// contains: 存在確認
print("虎杖悠仁 あり: \(members.contains("虎杖悠仁"))")
print("両面宿儺 あり: \(members.contains("両面宿儺"))")
// remove: 削除
if let removed = members.remove("虎杖悠仁") {
print("削除: \(removed)")
}
print("削除後: \(members)")
// count / isEmpty
print("要素数: \(members.count)")
print("空: \(members.isEmpty)")
// for-in でのイテレーション(順序は不定)
print("一覧:")
for member in members.sorted() {
print(" \(member)")
}
swift sample_set_insert_remove.swift 初期: ["五条悟", "虎杖悠仁", "伏黒恵"] 釘崎野薔薇追加: 成功 - 釘崎野薔薇 五条悟再追加: 既に存在 虎杖悠仁 あり: true 両面宿儺 あり: false 削除: 虎杖悠仁 削除後: ["五条悟", "伏黒恵", "釘崎野薔薇"] 要素数: 3 空: false 一覧: 伏黒恵 五条悟 釘崎野薔薇
概要
『Set』は重複を自動的に除外するコレクションです。配列に重複が含まれていても『Set(配列)』で変換すると重複が除去されます。
『insert(_:)』の戻り値は『(inserted: Bool, memberAfterInsert: Element)』のタプルです。要素がすでに存在する場合は既存の要素が返されます。Set の要素は Hashable に準拠している必要があります。カスタム型を使う場合は Hashable への準拠が必要です。
セット同士の集合演算についてはセット.union() / intersection() / subtracting()を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。