辞書内のすべてのキーに関数をマップしたいと思います。次のようなものが機能することを期待していましたが、フィルターを辞書に直接適用することはできません。これを実現する最もクリーンな方法は何ですか?
この例では、各値を 1 ずつ増やそうとしています。ただし、これはこの例では付随的なものであり、主な目的は辞書に map() を適用する方法を見つけることです。
var d = ["foo" : 1, "bar" : 2]
d.map() {
$0.1 += 1
}
ベストアンサー1
スイフト4+
朗報です! Swift 4 には、mapValues(_:)
同じキーを持ちながら値が異なる辞書のコピーを作成するメソッドが含まれています。また、任意のタプルのシーケンスからを作成するための と および初期化子を返すオーバーfilter(_:)
ロードも含まれています。つまり、キーと値の両方を変更したい場合は、次のように記述できます。Dictionary
init(uniqueKeysWithValues:)
init(_:uniquingKeysWith:)
Dictionary
let newDict = Dictionary(uniqueKeysWithValues:
oldDict.map { key, value in (key.uppercased(), value.lowercased()) })
また、辞書を結合したり、欠落している要素をデフォルト値に置き換えたり、値をグループ化したり (コレクションを何らかの関数にマッピングした結果をキーとして、コレクションを配列の辞書に変換したり) するための新しい API もあります。
提案の議論の中で、SE-0165これらの機能を導入した では、この Stack Overflow の回答を何度も取り上げましたが、賛成票の数の多さが需要の高さを証明したと思います。Swift をより良くするためのご協力に感謝します。