我正在合并需要在uniquingKeysWith中根据键值执行不同操作的词典。在一次合并中,我需要以下依赖于键的行为:

["sum":1]       + ["sum":2]       --> ["sum":3]
["accum":"A"]   + ["accum":"B"]   --> ["accum":["A", "B"]]
["negate":true] + ["negate":true] --> ["negate":false]
["first":"A"]   + ["first":"B"]   --> ["first":"A"]
["last":"A"]    + ["last":"B"]    --> ["last":"B"]

当然,这需要了解uniquingKeysWith中的“sum”、“accum”、“last”键,我认为它应该在这里。
然而,在uniquingKeysWith中,密钥的值似乎是不可知的,因此,似乎不可能使用包括uniquingKeysWith在内的方法。我已恢复手工合并。这是对的吗?这不应该包含在将来的版本中吗?

最佳答案

我想你想要这样的东西:

class MyDict {
    let sum: Int
    let acum: [String]
    let negate: Bool
    let first: String
    let last: String

    init(sum: Int, acum: [String], negate: Bool, first: String, last: String) {
        self.sum = sum
        self.acum = acum
        self.negate = negate
        self.first = first
        self.last = last
    }
}
func +(lhs: MyDict, rhs: MyDict) -> MyDict {
    return MyDict(sum: lhs.sum + rhs.sum, acum: lhs.acum + rhs.acum,
                  negate: lhs.negate != rhs.negate, first: lhs.first, last: rhs.last)
}

let a = MyDict(sum: 1, acum: ["A"], negate: true, first: "a", last: "aa")
let b = MyDict(sum: 2, acum: ["B"], negate: true, first: "b", last: "bb")
a + b //== MyDict(sum: 3, acum: ["A","B"], negate: false, first: "a", last: "bb")

我唯一不知道的是你想让negate做什么

关于swift - 使用uniquingKeysWith的键相关 Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50527866/

10-10 11:31