Swift の Set(セット)- ループ・map・filter

ここでは Swift の Set(セット)のループ方法と、filter・map メソッドの使い方についてご説明します。

Swift の Set(セット)をループする

Swift の Set(セット)をループするには、何通りか方法があります。

一番ベーシックな方法は for-in ループを使う方法です。

let numbers: Set = [1, 2, 3, 4, 5]

for number in numbers {
    print(number)
}

実行結果は次のようになり、要素が全て print されています。Set は順序を保たない値の集合なので、順番は Insert に指定した順番とは違っています。

2
4
5
3
1

Swift の Set(セット)- ループ・map・filter 1


Array と同様に forEach() メソッドを使っても同じように、Set の要素を print することができます。

let numbers: Set = [1, 2, 3, 4, 5]

numbers.forEach { number in
    print(number)
}

実行結果は次のようになり、要素が全て print されています。

2
5
4
1
3

for-in ループとの違いは forEach() では break や continue が使えないことなどがあげられます。

ループ処理の途中で何かの条件で break、continue、return したいような時は for-in ループを使ってください。


Set は要素の順番を意識しないユニークな値の集合ですが、Insert された時に値が格納される順番が決まって、その場所は固定されています。

同じコードを実行しても、実行する度にその順番は変わることが多いです。

enumerated() を使ってループすると、一応インデックスも取得できます。

let numbers: Set = [1, 2, 3, 4, 5]

for (index, number) in numbers.enumerated() {
  print("\(index): \(number)")
}

実行結果は次のようになります。 配列のようにインデックスではアクセスできませんが、Set の要素のインデックスも取得できます。

0: 3
1: 1
2: 5
3: 2
4: 4

map() で Set(セット)から要素を変換した Array を生成する

Swift の Set(セット)の map() メソッドを使って、要素を変換した Array(配列)を生成することができます。

例えば、全ての要素を 10 倍した要素を持つ Array を生成したい時は次のようにできます。

let numbers: Set = [1, 2, 3, 4, 5]
let numbers10 = numbers.map { $0 * 10 }

print(numbers)
print(numbers10)
print(type(of: numbers10))

実行結果は次のようになり、numbers10 の要素は全て 10 倍になっていて、データ型が Array になっていますね。

[1, 2, 4, 5, 3]
[10, 20, 40, 50, 30]
Array<Int>

Set 型で取得したい時は、Set(numbers.map { $0 * 10 }) のようにすると、Set 型にできます。


filter() で要素をフィルターした Set を生成する

Swift の filter() メソッドを使って、Set(セット)から指定した条件を満たす要素だけを含んだ Set を生成することができます。

例えば、次のような numbers セットの中で、2 で割り切れるものだけを要素とした Set を生成するには次のようにできます。

let numbers: Set = [1, 2, 3, 4, 5, 6, 7, 8]
let numbers2 = numbers.filter { (number) in
    return number % 2 == 0
}

print(numbers)
print(numbers2)
print(type(of: numbers2))

実行結果は次のようになり、numbers2 には 2 で割り切れる要素だけが含まれ、型は map() と違って Set になっていますね。

[3, 8, 5, 7, 6, 4, 2, 1]
[2, 4, 8, 6]
Set<Int>

以上、Swift の Set(セット)のループ方法と、filter・map メソッドの使い方についてご説明しました。

© 2024 iOS 開発入門