Swift コレクションタイプ Set<Element>

SwiftSet

SwiftのコレクションにはSet<Element>があり、SetはArrayとはまったく違う機能を持っています。Set<Element>の代表的な特徴を、ふれてみます。まずは、Setに[1,1,1,1]を入れて確認してみる。

let set1: Set<Int> = [1, 1, 1, 1]
print(set1.count)  // 1
print(set1)        // [1]

上のコードを実行するとset1の中は[1]が1つしか入っていません。Set<Element>は、同じ内容であれば1つにまとめてしまうようです。

let set1: Set<Int> = [1, 2, 1, 2]

上記のような[1,2,1,2]であれば結果は[1,2]の2つが入ることになり配列順番はバラバラです。どうやら都合よく一纏めにしてくれるようです。

Set<Element> 追加・削除

追加や削除に関しては、Array<Element>と同じように行なえます。

var set1: Set<Int> = [1, 2, 1, 2]
set1.insert(3)    // 3を追加
set1.remove(1)    // 1を削除
print(set1.count) // 2
print(set1)       // 3,2が入る

Set<Element> 内に値が含まれているか判断

Set内に目的の値が含まれているかを判断したい場合、containsを使って下記のような記述でできます。

var set1: Set<Int> = [1, 2, 1, 2]
print(set1.contains(2)) //true

Set同士の比較

2つのSetがあった場合の比較したい場合、isSubset, isSuperset, isDisjointが使えます。

let set1: Set<Int> = [1, 2, 3, 4]
let set2: Set<Int> = [1, 3]
print(set2.isSubset(of: set1)) //true

上記のisSubsetは、set2の中にset1が入っているか確認できます。isSupersetはその逆でisDisjointは、要素が入っていない場合trueを返します。

let set1: Set<Int> = [1, 2, 3, 4]
let set2: Set<Int> = [1, 3]
let set3: Set<Int> = [5, 10]
print(set1.isSuperset(of: set2))  //true
print(set2.isDisjoint(with: set3)) //true

Swift 配列と辞書【Array | Dictionary】

swift array2

Swiftで変数を配列としてもたせる場合は下記のように記述することができてとてもシンプルです。

var array1= [1,2,3]
var str_array1= ["あ","い","う"]

数値や文字列を自動で判断するようですので、型を気にする必要はありません。数値と文字列を混ぜる場合 as [Any]をつけて対応することもできます。

var array1 = [1,"い","う"] as [Any]

上記のような場合、型はどうなっているのか確認したいので、下記のように記述し型を取得します

var array1 = [1,2,3]
print(type(of: array1))
var str_array1 = [1,"い","う"] as [Any]
print(type(of: str_array1))

実行すると 数値だけの型はArray<Int>で、数値と文字列が混ざっている場合Array<Any>になっていました。

Array<Any>だと何でも入るのですが文字列かどうかを判断する必要があります。

let ar1:Array<Any>  = [1, "文字列", Button("Button1",action: {})]
print(ar1.count)
print("ar1[1] = " + (ar1[1] as! String))

上の例は、配列の1番目を取得したので文字列にキャストしています。

配列の追加・削除【append】

配列に追加・削除したい場合下記のように記述できます

var array1 = [1,2,3]
array1.append(4) //追加
array1.remove(at: 0) //0番目削除

配列に4を追加して 配列の0番目を削除しています。

mapを使って配列の値を一括に処理したい場合

var array1 = [1,2,3]
let array2 = array1.map {
    $0 + 2
}

mapを使って、[1,2,3]それぞれに+2したarray2を作成しました。array2 = [3,4,5]になります。

swift array2

配列内を一つづつ取得し処理したい場合【for】

配列を繰り返し処理したい場合、for inforEachが使えます。

var array1 = [1,2,3]

let array2 = array1.map {
	$0 + 2
}

array1.append(4)
array1.remove(at: 0)

array1.forEach{ i -> Void in
	print("array1 = \(i)")
}
for i in array2{
	print("array2 = \(i)")
}

辞書 【Dictionary】 を使う

DictionaryはKey, Valueがセットになっていて Keyで指定したValueが取得できます。PHPなどの連想配列のようなイメージでしょうか

var dic1 = [1:"a", 2:"b", 3:"c"]

上記のように値をセットするとDictionary<Int,String>と自動的に判断します。

var dic1 = [1:"a", 2:"b", 3:"c"]
dic1[1] = "abc"  //値を変更
dic1[100] = "百" //新たにキーと値を追加

値を指定して代入や新たにKeyとValueを追加することもできます。

DictionaryでforEachを使う場合

var dic1 = [1:"a", 2:"b", 3:"c"]
dic1.forEach{(k,v) -> Void in
	print("key = \(k), value=\(v)")
}
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED