Вы можете использовать compactMap
в последовательности пар ключ / значение исходного словаря, чтобы извлечь их с целочисленным ключом, и Dictionary(uniqueKeysWithValues:)
, чтобы создать новый словарь:
let myDict: [String: [String: Any]] = [
"test": [ "0": [ "test" : "test" ]],
"123": [ "1" :[ "foo": "bar" ] ]
]
let myDict2 = Dictionary(uniqueKeysWithValues: myDict.compactMap { (key, value) in
Int(key).map { ($0, value) }
})
print(myDict2) // [123: ["1": ["foo": "bar"]]]
print(type(of: myDict2)) // Dictionary<Int, Dictionary<String, Any>>
Вот оноПредполагается, что все строки представляют различных целых чисел.Если это не гарантировано, используйте вместо этого
let myDict2 = Dictionary(myDict.compactMap { (key, value) in
Int(key).map { ($0, value) }
}, uniquingKeysWith: { $1 })
.Дополнительный параметр определяет, какое значение используется в случае дубликатов ключей, при этом { $1 }
последний «выигрывает».