Swift の Dictionary(辞書)- ループ・mapValue・filter
ここでは Swift の Dictionary(辞書)のループ方法と、mapValue・filter メソッドの使い方についてご説明します。
Swift の Dictionary(辞書)のキーと値をループする
Swift の Dictionary(辞書)のキーと値をループするには、何通りか方法があります。
まずは for-in ループを使う方法です。
for に続いて指定した変数に現在のキーと値のペアが入り、キーは .key、値は .value で取得できます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
for d in dict {
print("\(d.key): \(d.value)")
}
実行結果は次のようになります。 Swift の Dictionary(辞書)は順番を保たないので、生成時に指定した順番とは違いますが、全てのキーと値のペアが print されています。
Key3: 66
Key4: 72
Key1: 100
Key2: 30
次のようにして、キーと値をタプルに分割代入してしまうこともできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
for (key, value) in dict {
print("\(key): \(value)")
}
実行結果は次のようになります。
Key4: 72
Key3: 66
Key2: 30
Key1: 100
forEach() メソッドを使っても同じように、辞書のキーと値を print することもできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
dict.forEach { d in
print("\(d.key): \(d.value)")
}
実行結果は次のようになり、全てのキーと値が print されています。
Key4: 72
Key1: 100
Key2: 30
Key3: 66
for-in ループとの違いは forEach() では break や continue が使えないことなどがあげられます。
ループ処理の途中で何かの条件で break、continue、return したいような時は for-in ループを使ってください。
Swift の Dictionary(辞書)のキーのみ、値のみをループする
Swift の Dictionary(辞書)のキーのみ、値のみをループするには、keys プロパティと values プロパティをループします。
Dictionary のキーと値のペアのキーのみをループしたい時は次のようにできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
for key in dict.keys {
print(key)
}
実行結果は次のようになります。
Key2
Key3
Key4
Key1
Dictionary のキーと値のペアの値のみをループしたい時は次のようにできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
for value in dict.values {
print(value)
}
実行結果は次のようになります。
66
72
30
100
Dictionary のキー順でループして、値も取得したい時は、keys の sorted() メソッドを使って、次のようにすることができます。
ここでは、値があることがわかっているので、dict[key] で得られるオプショナルの値を ! で強制アンラップしていますが、nil になる可能性がある場合はお気をつけください。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
for key in dict.keys.sorted() {
print("\(key): \(dict[key]!)")
}
実行結果は次のようになり、Key の順番で出力されています。
Key1: 100
Key2: 30
Key3: 66
Key4: 72
mapValue() で値を変換した Dictionary を生成する
Swift の Dictionary(辞書)の mapValue() メソッドを使って、値を変換した辞書を生成することができます。
例えば、値を全部 10 倍に変換した辞書を生成したい時は次のようにできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
let dict2 = dict.mapValues { value in
return value * 10
}
print(dict)
print(dict2)
実行結果は次のようになり、dict2 の値が全て 10 倍されています。
["Key2": 30, "Key3": 66, "Key4": 72, "Key1": 100]
["Key2": 300, "Key3": 660, "Key4": 720, "Key1": 1000]
filter() でフィルターしたキーと値を持つ Dictionary を生成する
Swift の filter() メソッドを使って、指定した条件を満たすキーと値のペアだけを含んだ辞書を生成することができます。
例えば、次のような dict 辞書の中で、値が 70 以上のキーと値のペアのみを含む辞書を生成したい場合は次のようにできます。
let dict = ["Key1": 100, "Key2": 30, "Key3": 66, "Key4": 72]
let dict2 = dict.filter { key, value in
return value >= 70
}
print(dict2)
実行結果は次のようになり、dict2 には値が 70 以上のキーと値のペアのみが含まれていますね。
["Key1": 100, "Key4": 72]
以上、Swift の Dictionary(辞書)のループ方法と、mapValue・filter メソッドの使い方についてご説明しました。