我得到了这个JSON:
unique:table_name:column_name
JSON中的密钥只能是一个字符串,因此当我检索此json时,我得到以下声明:
{
"test":{
"0":{
"test":"test"
}
}
}
现在,我想过滤掉所有比强制转换为整数的键,因此我要使用的字典是:
let myJson = [String: [String: Any]]()
我如何let myJson2 = [Int: [String: Any]]()
/ compactMap
filter
到myJson
来过滤掉所有myJson2
键并复制值?我知道了:
Int
但是我正在寻找可以在1行中完成的compactMap解决方案
答案 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 }
用于最后一个
“胜利”。