bugfix> swift > 投稿

キー値に応じてuniquingKeysWith内で異なるアクションを必要とする辞書をマージしています。 1つのマージで、次のキーに依存する動作が必要です。

["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」の知識が含まれます。

ただし、keyの値はuniquingKeysWith内では認識できないようであるため、unihoはuniquingKeysWithを含むメソッドで実行することは不可能に思えます。手作業でマージを行うように復元しました。これは正しいです?これは将来のバージョンに含まれるべきではありませんか?

回答 1 件
  • 次のようなものが欲しいと思います:

    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")
    
    

    私が知らない唯一のことは、あなたが否定したいことです

あなたの答え