1. ホーム
  2. swift

[解決済み] Swiftで辞書にmap()を適用する一番きれいな方法は何でしょうか?

2022-05-03 04:14:43

質問

辞書のすべてのキーに関数をマッピングしたいのですが、どうすればいいですか?以下のようなものがうまくいくかと思ったのですが、辞書に直接フィルタを適用することはできません。これを達成する最もきれいな方法は何ですか?

この例では、それぞれの値を1ずつ増やそうとしていますが、これはこの例にとって付帯的なもので、主な目的は辞書にmap()を適用する方法を見つけ出すことです。

var d = ["foo" : 1, "bar" : 2]

d.map() {
    $0.1 += 1
}

解決方法は?

Swift 4+

朗報です。Swift 4には mapValues(_:) メソッドは、同じキーで異なる値を持つ辞書のコピーを作成します。また filter(_:) を返すオーバーロード。 Dictionaryinit(uniqueKeysWithValues:)init(_:uniquingKeysWith:) のイニシャライザを使用して Dictionary を任意のタプルの列から作成します。つまり、キーと値の両方を変えたい場合は、次のように言えばよい。

let newDict = Dictionary(uniqueKeysWithValues:
    oldDict.map { key, value in (key.uppercased(), value.lowercased()) })

また、辞書のマージ、欠落した要素のデフォルト値への置き換え、値のグループ化(コレクションを何らかの関数にマッピングした結果をキーとする配列の辞書への変換)などを行う新しいAPIも用意されている。

提案の議論中 SE-0165 これらの機能を導入したStack Overflowの回答を何度か取り上げましたが、そのアップボートの数の多さが需要を実証するのに役立ったと思います。Swift をより良くするためのあなたの手助けに感謝します!