我想在字典中的所有键上映射一个函数。我希望像下面这样的东西会起作用,但过滤器不能直接应用于字典。实现这一目标的最干净的方法是什么?
在此示例中,我尝试将每个值增加 1。但是,这对于示例来说是偶然的 - 主要目的是弄清楚如何将 map() 应用于字典。
var d = ["foo" : 1, "bar" : 2] d.map() { $0.1 += 1 }
斯威夫特 4+
好消息!Swift 4 包含一个mapValues(_:)方法,该方法使用相同的键构造字典的副本,但值不同。它还包括一个filter(_:)重载,它返回 a和Dictionary初始化器以从任意元组序列创建 a 。这意味着,如果您想同时更改键和值,您可以这样说:init(uniqueKeysWithValues:)``init(_:uniquingKeysWith:)``Dictionary
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 变得更好!