更改字典中键的类型

时间:2018-10-06 11:07:18

标签: swift dictionary

我得到了这个JSON:

unique:table_name:column_name

JSON中的密钥只能是一个字符串,因此当我检索此json时,我得到以下声明:

{
  "test":{
    "0":{
      "test":"test"
    }
  }
}

现在,我想过滤掉所有比强制转换为整数的键,因此我要使用的字典是:

let myJson = [String: [String: Any]]()

我如何let myJson2 = [Int: [String: Any]]() / compactMap filtermyJson来过滤掉所有myJson2键并复制值?我知道了:

Int

但是我正在寻找可以在1行中完成的compactMap解决方案

1 个答案:

答案 0 :(得分:4)

您可以在原始键/值对的序列上使用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 }用于最后一个 “胜利”。