SwiftにはSetという型があります。今回はこのSetについて説明します。
SetはCollection Type
SetはCollection Typeというプロトコルに準拠した型です。
Collection Typeに準拠した型は決められた型の値を格納し、それ以外の型は格納することはできません。なので、必ず決められた型の値を受け取ることが保証されます。
Collection Typeに準拠しているものは他に、ArrayとDictionaryがあります。
ではそれらとSetの違いや使い分ける基準は何でしょう?
Setの特徴
Setの特徴は
- 重複しないユニークなデータを保持する。
- 要素の順番は関係ない
という点になります。ユニークなデータを保持するため、要素はHashableに準拠していなければなりません。ArrayとDictionaryと比較しやすいように以下にまとめます。
型 | 要素の重複 | 要素の順序 | 要素がHashableに準拠 |
Set | × | 順序は保持されない | 準拠する必要がある |
Array | ◯ | 格納順に保持 | 必ずしも準拠する必要はない |
Dictionary | keyは× vakueは◯ | 順序は保持されない | 準拠する必要がある |
特徴にこのような違いがあるので、正しく使い分けるようにしましょう。
Setの使い方
使い方は特に難しくありません。
let intData: Set = [1, 3, 5, 7, 9]
IntはHashableに準拠しているため、こんな感じで簡単に使用できます。
また、insertやremoveといった配列系の型によくある処理のほかに、Setには特徴的な関数がいくつか用意されています。
let set1: Set = [a,b,c,d]
let set2: Set = [c,d,e,f]
se1とset2という2つのSetがあるとします。
set1.union(set2)
重複を除くset1とset2に含まれるすべての要素を新しいSetにする。
=[a,b,c,d,e,f]
set1.intersection(set2)
set1とset2の重複している要素を新しいSetにする
=[c,d]
set1.symmetricDifference(set2)
set1とset2で重複してなくどちらかにだけある要素をSetにする
=[a,b,e,f]
こういった処理もうまく利用していきましょう。
コメント