小编典典

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

all

我想在字典中的所有键上映射一个函数。我希望像下面这样的东西会起作用,但过滤器不能直接应用于字典。实现这一目标的最干净的方法是什么?

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

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

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

阅读 94

收藏
2022-07-17

共1个答案

小编典典

斯威夫特 4+

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

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

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

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

2022-07-17