当前位置: 首页 > 面试题库 >

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

蒋培
2023-03-14
问题内容

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

在此示例中,我尝试将每个值加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
。这意味着,如果您想同时更改键和值,则可以这样说:


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

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

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



 类似资料:
  • 我试图理解如何在docker中正确添加非root用户,并给他们sudo权限。假设我当前的Ubuntu 18.04系统中janedoe是sudo用户。我想创建一个docker映像,在其中我想添加janedoe作为非root用户,在需要时可以拥有sudo权限。由于我和Docker都是Linux系统新手,我通常希望有人通过一个例子来解释如何做到这一点。 我理解的是,每当我在Dockerfile中发出命令

  • 问题内容: 我有一个DOM元素,应用了以下一些/全部效果: 我正在编写一个调整此元素大小的jQuery插件,我需要暂时禁用这些效果,以便可以平滑地调整其大小。 临时禁用这些效果(然后重新启用它们)的最优雅的方法是什么,因为它们可能是由父母应用的,也可能根本没有应用。 问题答案: 简短答案 使用此CSS: 加上这个JS(没有jQuery)… 或者这个带有jQuery的JS … …或使用您正在使用的任

  • 问题内容: 那就是我的做法: 有什么好处吗?如何避免那些意粉般的代码? 问题答案: 检出异步库,它用于控制流(异步内容),并且它有很多用于数组内容的方法:每种方法,过滤器,映射。查看github上的文档。这可能是您需要的: 每个(arr,迭代器,回调) 将迭代器函数并行应用于数组中的每个项目。调用迭代器时,将使用列表中的项目以及完成时的回调。如果迭代器将错误传递给此回调,则该函数的主回调将立即被错

  • 问题内容: 我需要使用$ resource 发送带有我的DELETE请求的请求正文 我可以看到的唯一方法是更改​​: https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js 从 至 有没有更好的方法来覆盖此?就像您更改内容类型标头时一样,您可以执行以下操作: 或类似的东西…我已经用谷歌搜索了一下,但也

  • 问题内容: 我在标准库上进行了查找,但未发现类似问题。因此,有没有一种方法可以在不滚动我自己的函数的情况下进行以下操作?如果没有内置的方法,那么如果有人编写了精美的函数,奖励积分就可以了。 问题答案: 将用作:

  • 问题内容: 。 我需要从作为组件状态的数组中删除一个元素。这意味着它是一个不变的对象。 使用传播语法可以轻松添加元素。 删除有些棘手。我需要使用一个中间对象。 它使代码更加肮脏并且难以理解。 创建一个新数组从中删除元素是否更容易或更轻松? 问题答案: 您可以结合使用spread和Array#slice: 另一个选择是Array#filter: