参考: Swift标准库>字典> map(_:)
返回一个数组,其中包含映射给定闭包的结果 在序列的元素上。
如上所述,我们可以在字典中进行映射,但输出将是数组,而不是"映射"字典。
老实说,我不太确定是否要说"映射整个字典"是合法的,但我的意思是:
考虑一下我们:
let myDict = ["1": "one","2": "tow","3": "three"]
我们要映射整个事情! (键和值)。输出应该是:
let mappedDict = ["03": "THREE", "02": "TOW", "01": "ONE"]
让我们假设映射的目标是添加" 0"作为所有键的第一个字符,让所有值都是大写的。
为了使其更具可读性,我发布了一个解决方案(我尝试过的)作为答案,而不是在自己的问题中提及它;我认为我的答案不是那么优雅(或者至少我对它的代码味道的感觉),我映射了键,值并将它们组合在一个字典中,每一步都是独立完成的。< / p>
所以,我要问的是:
有没有办法直接一步完成这项工作?类似于:
此代码段演示了我所询问的内容,代码无法正常工作
let myDict = ["1": "one","2": "tow","3": "three"]
let mappedDict = myDict.map { key, value in
"0" + key
value.uppercased()
}
提前致谢。
答案 0 :(得分:0)
您可以通过执行以下操作来实现此目的:
let myDict = ["1": "one","2": "tow","3": "three"]
let mappedKeys = myDict.map { "0" + $0.key } // ["02", "01", "03"]
let mappedValues = myDict.map { $0.value.uppercased() } // ["TOW", "ONE", "THREE"]
var mappedDict = [String: String]()
let zippedArray = Array((zip(mappedKeys, mappedValues)))
for element in zippedArray {
mappedDict[element.0] = element.1
}
print(mappedDict) // ["03": "THREE", "02": "TOW", "01": "ONE"]
为了更清楚,上面的代码片段执行以下操作:
mappedDict
以附加到它。zippedArray
(使用zip
)。mappedDict
。答案 1 :(得分:0)
这个怎么样?
zip