[Swift]辞書(Dictionary)の値(Value)からキー(key)を取得するには?

Swift

どうも、ちょげ(@chogetarou)です。

辞書の値からキーを取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

辞書の値からキーを取得する方法は、2つあります。

1つだけ

1つは、値を1つだけ取得する方法です。

まず、辞書からfirstメソッドを呼び出します。

firstメソッドの引数「where」のクロージャーで「$1 == 値」を指定します。

そして、firstメソッドの結果のkeyプロパティにアクセスします。

//valueのキーを取得
let key = dict.first(where: { $1 == value })?.key

firstメソッドの戻り値のkeyプロパティは、値からキーを返します。

使用例

let numbers = [
    "one" : 1,
    "two" : 2,
    "three" : 3,
]

let key = numbers.first(where: { $1 == 2 })?.key

print(key!) //"two"

複数

もう1つは、値から複数のキーを取得する方法です。

まず、辞書からfilterメソッドを呼び出します。

filterメソッドのクロージャーで「$1 == 値」を返します。

そして、filterメソッドの結果からmapメソッドを呼び出します、

mapメソッドのクロージャーで「$0.0」を返します。

//valueのキーを全て取得
let key = dicy.filter { $1 == value }.map { $0.0 }

上記のmapメソッドは、値のキーを全て取得できます。

使用例

let numbers = [
    "one" : 1,
    "two" : 2,
    "three" : 3,
    "いち" : 1,
    "に" : 2,
    "さん" : 3,
]

let keys = numbers.filter { $1 == 3 }.map { $0.0 }

print(keys) //["さん", "three"]

まとめ

辞書の値からキーを取得する方法は、次の2つです。

  • firstメソッドで値のキーを1つだけ取得する方法
  • filterメソッドとmapメソッドで値のキーを全て取得する方法

コメント

タイトルとURLをコピーしました