【Swift】Set型(集合)とは?使い方やメソッドまとめ!和集合/積集合

【Swift】Set型(集合)とは?使い方やメソッドまとめ!和集合/積集合

この記事からわかること

  • SwiftSet型|集合とは?
  • 使い方メリット
  • 使えるメソッド和集合の抽出方法
  • 重複しない一意の値のみの配列を作成する

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Set型|集合とは?

SwiftのSet型(集合)とは順序を持たず、値を一意に保持するコレクション型(※)の1つです。※他には配列型(Array)や辞書型(Dictionary)がある

基本的な仕組みは配列と同じですが、保持する値は、同じ集合内で重複する値がある場合は自動で除去されます。

Set型|集合の特徴

使い方

@frozen  struct Set<Element> where Element : Hashable

Swiftで集合を扱うにはSet構造体を使います。変数に格納する際は型としてSetを指定するかSet構造体のイニシャライザを使用します。

let langSet:Set = ["HTML","CSS","JavaScript","PHP","Swift"]
let langSet = Set(["HTML","CSS","JavaScript","PHP","Swift"])

値のデータ型

扱う値のデータ型を指定する際は<型名>の形式で指定します。初期値がある場合は型推論で型が決まるので<型名>は省略できますが、空の集合を定義する場合は型の定義が必須になります。

let langSet:Set<String> = ["HTML","CSS","JavaScript","PHP","Swift"]

let numSet:Set = [1,2,3]

let numSet:Set<Int> = []

特徴

順序は保証しない

let numSet: Set = [1,2,3]
print(numSet) // [2,3,1]

重複する値は保持しない

let numSet: Set = [1,2,3,3,4,2]
print(numSet) // [1,2,3,4]

Set型で使えるプロパティやメソッド

変数に格納したSet型に対して用意されたプロパティやメソッドを呼び出すことで様々な情報や要素を取得できます。

isEmpty:空かどうか

集合が空かどうかを識別し、空ならtrue、要素があればfalseを返します。

let numSet: Set = [1,2,3]
numSet.isEmpty // false

count:要素数を数える

集合の要素数をカウントします。

let numSet: Set = [1,2,3]
numSet.count // 3

capacity:容量を調べる

集合に予め容量が定義されている場合のみ容量を返します。容量を定義するにはinit(minimumCapacity: Int)使用します。

let numSet = Set(minimumCapacity: 3)
numSet.capacity // 3

要素が存在するかどうか:contains

引数に指定した値が要素内にあるかどうかを調べます。

let numSet: Set = [1,2,3]
numSet.contains(3) // true

要素を追加する:insert

要素を追加するにはinsertメソッドを使用します。

var numSet: Set = [1,2,3]
numSet.insert(4)

要素を追加する:insert

公式リファレンス:insertメソッド

要素を追加するにはinsertメソッドを使用します。

var numSet: Set = [1,2,3]
numSet.insert(4)

このメソッドはSetの中に要素を追加しますが、既に同じ値を保持している場合は追加しません。


@discardableResult
mutating func insert(_ newMember: Element) -> (inserted: Bool, memberAfterInsert: Element)

返り値として(inserted: Bool, memberAfterInsert: Element)型を返します。insertedでは追加が完了したか(重複した値があったか)どうかを返します。

和集合や積集合を取得する

数学的な考え方において2つのグループのうち「どちらか片方に入っている集合」を和集合(∪)、「両方共に入っている集合」を積集合(∩)と呼びます。和集合のことをユニオン、積集合のことをインターセクションと呼んだりもします。

【Swift】Set型(集合)とは?使い方やメリット!和集合や積集合を取得する

和集合:union

2つの集合の和集合だけを抽出するにはunionを使用します。呼び出した集合と引数に指定した集合の和集合を持った集合を返り値として返します。

let numSetA: Set = [1,2,3,4,5]
let numSetB: Set = [4,5,6,7,8]
let unionSet = numSetA.union(numSetB)
print(unionSet) // [1, 8, 4, 7, 6, 5, 3, 2]

元のSetを変更したい場合はformUnionを使用します。

var numSetA: Set = [1,2,3,4,5]
let numSetB: Set = [4,5,6,7,8]
numSetA.formUnion(numSetB)
print(numSetA) // [1, 8, 4, 7, 6, 5, 3, 2]

和集合:intersection

2つの集合の積集合だけを抽出するにはintersectionを使用します。

let numSetA: Set = [1,2,3,4,5]
let numSetB: Set = [4,5,6,7,8]
let intersectionSet = numSetA.intersection(numSetB)
print(intersectionSet) // [4, 5]

差集合:symmetricDifference

2つの集合の差集合だけを抽出するにはsymmetricDifferenceを使用します。差集合はA集合の中からB集合に属する要素を全て除去した集合のことです。

let numSetA: Set = [1,2,3,4,5]
let numSetB: Set = [4,5,6,7,8]
let symmetricDifferenceSet = numSetA.symmetricDifference(numSetB)
print(symmetricDifferenceSet) // [7, 1, 8, 2, 3, 6]

配列から重複する値だけを除去する

Set型の特徴をうまく使うことで配列から重複する値だけを除去し、一意の値だけを保持する配列を生成することが可能になります。

方法は簡単で対象の配列をSet構造体のイニシャライザを使用して変数に格納するだけです。これだけで自動的に重複値が除去されます。続いてArrayのイニシャライザで配列に戻し、sortedメソッドで順番を整えればOKです。

var numArray:[Int] = [1,2,3,4,5,5,5,2,3,1,3,4]
let numSet = Set(numArray)
numArray = Array(numSet).sorted()
print(numArray) // [1, 2, 3, 4, 5]

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index