在Swift字典中反转键的值,收集重复值

问题描述 投票:0回答:2

我有以下字典:

let dict = ["key1": "v1", "key2": "v1", "key3": "v2"]

我想交换键的值,以便结果为:

result = ["v1": ["key1", "key2"], "v2": ["key3"]]

如果不使用for循环(即更优雅),我怎么能这样做?

swift dictionary
2个回答
3
投票

您可以在Swift 4中使用分组初始化程序:

let dict = ["key1": "v1", "key2": "v1", "key3": "v2"]
let result = Dictionary(grouping: dict.keys.sorted(), by: { dict[$0]! })

两个笔记:

  1. 如果结果数组中的键顺序不重要,则可以删除.sorted()
  2. 在这种情况下,强制解包是安全的,因为我们将现有的字典键作为$0参数

2
投票

在Swift 4中,Dictionaryinit(_:uniquingKeysWith:)初始化程序,应该在这里很好用。

let d = [1 : "one", 2 : "two", 3 : "three", 30: "three"]
let e = Dictionary(d.map({ ($1, [$0]) }), uniquingKeysWith: {
    (old, new) in old + new
})

如果原始字典中没有需要组合的重复值,这将更简单(使用another new initializer):

let d = [1 : "one", 2 : "two", 3 : "three"]
let e = Dictionary(uniqueKeysWithValues: d.map({ ($1, $0) }))
© www.soinside.com 2019 - 2024. All rights reserved.