gpt4 book ai didi

swift - 如何用 += 运算符重载连接两个字典

转载 作者:可可西里 更新时间:2023-10-31 23:55:15 27 4
gpt4 key购买 nike

我想使用以下方法将两个字典与 += 运算符重载连接起来。

static func += <Key, Value> ( left: inout [Key : Value], right: [Key : Value]) {
for (key, value) in right {
left.updateValue(value, forKey: key)
}
}

static func +=<Key, Value>( left: inout Dictionary<Key ,Value>, right: Dictionary<Key, Value>) {
for (key, value) in right {
left.updateValue(value, forKey: key)
}
}

有了这个实现:

var properties = ["Key": "Value"]
var newProperties = ["NewKey": "NewValue"]
properties += newProperties

我从 xCode 得到以下错误,

Cannot convert value of type '[String: Any]' to expected argument type 'inout [_ : ]' (aka 'inout'Dictionary<, _>)

它不起作用,任何人都可以帮助我,或者如果不可能,请解释为什么?

最佳答案

Swift 4 备选方案

由于 Swift 4 即将推出,我将添加一个答案(特别是解决问题或标题),包括发布时可用的其他方法。

进化提议

是在 Swift 4 中实现的,将允许您使用诸如变异 merge(_:uniquingKeysWith:) 之类的方法。 (或非变异 merging(_:uniquingKeysWith:) )组合两个字典,这也允许您指定如何解决键冲突。

例如,使用 merge(_:uniquingKeysWith:) 实现您的 += 函数,用右侧的关联值覆盖现有的键值(在发生冲突时)边字典:

extension Dictionary {

static func += (lhs: inout Dictionary, rhs: Dictionary) {
lhs.merge(rhs) { (_, new) in new }
}
}

/* example usage */
var dictA = ["one": 1,
"two": 2,
"three": 3]

let dictB = ["three": 42,
"four": 4]

dictA += dictB
print(dictA)
// ["one": 1, "two": 2, "three": 42, "four": 4]
// (any order is coincidental)

关于swift - 如何用 += 运算符重载连接两个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com