我想在字典中的所有键上映射一个函数。我希望可以执行以下操作,但是过滤器无法直接应用于字典。实现这一目标的最干净的方法是什么?
在此示例中,我尝试将每个值加1。但这对于示例来说是偶然的-主要目的是弄清楚如何将map()应用于字典。
var d = ["foo" : 1, "bar" : 2] d.map() { $0.1 += 1 }
迅捷4+
好消息!Swift 4包含一种mapValues(_:)方法,该方法使用相同的键但值不同来构造字典的副本。它还包含一个filter(_:)重载函数Dictionary,该重载函数返回a 和,init(uniqueKeysWithValues:)并使用init(_:uniquingKeysWith:)初始值设定项Dictionary从任意元组序列创建a 。这意味着,如果您想同时更改键和值,则可以这样说:
mapValues(_:)
filter(_:)
Dictionary
init(uniqueKeysWithValues:)
init(_:uniquingKeysWith:)
let newDict = Dictionary(uniqueKeysWithValues: oldDict.map { key, value in (key.uppercased(), value.lowercased()) })
还有一些新的API可将字典合并在一起,用默认值替换缺少的元素,对值进行分组(将集合转换为数组的字典,由将集合映射到某个函数上的结果作为关键)。
在讨论介绍这些功能的建议SE-0165期间,我多次提出了这个Stack Overflow的答案,而且我认为赞成票的数目之多有助于证明需求。因此,感谢您的帮助,使Swift变得更好!