一尘不染

在Swift中将map()应用于字典的最干净的方法是什么?

swift

我想在字典中的所有键上映射一个函数。我希望可以执行以下操作,但是过滤器无法直接应用于字典。实现这一目标的最干净的方法是什么?

在此示例中,我尝试将每个值加1。但这对于示例来说是偶然的-主要目的是弄清楚如何将map()应用于字典。

var d = ["foo" : 1, "bar" : 2]

d.map() {
    $0.1 += 1
}

阅读 360

收藏
2020-07-07

共1个答案

一尘不染

迅捷4+

好消息!Swift
4包含一种mapValues(_:)方法,该方法使用相同的键但值不同来构造字典的副本。它还包含一个filter(_:)重载函数Dictionary,该重载函数返回a
和,init(uniqueKeysWithValues:)并使用init(_:uniquingKeysWith:)初始值设定项Dictionary从任意元组序列创建a
。这意味着,如果您想同时更改键和值,则可以这样说:

let newDict = Dictionary(uniqueKeysWithValues:
    oldDict.map { key, value in (key.uppercased(), value.lowercased()) })

还有一些新的API可将字典合并在一起,用默认值替换缺少的元素,对值进行分组(将集合转换为数组的字典,由将集合映射到某个函数上的结果作为关键)。

在讨论介绍这些功能的建议SE-0165期间,我多次提出了这个Stack
Overflow的答案,而且我认为赞成票的数目之多有助于证明需求。因此,感谢您的帮助,使Swift变得更好!

2020-07-07