首页 文章

覆盖Swift中字典的默认行为以忽略零值?

提问于
浏览
0

我想创建一个像Dictionary一样的数据类型,但忽略任何值为零的键,例如考虑一个假设的例子:

typealias SpecialDict = Dictionary<String,Int>
let testA: SpecialDict = ["a":1, "b":4, "c":0]
let testB: SpecialDict = ["a":1, "b":4]
testA == testB // should evaluate as true

我不确定是否更好:

  • override ==给出这种行为,每次比较两个词典时都要付出代价

  • 覆盖updateValue(_:forKey :),这样每当我们尝试将值设置为0时,它只是从字典中删除相应的键(首选)

  • 完全尝试不同的数据类型

或者,一种创建具有固定键列表的字典的方法(即,您无法添加或删除键,只需更改其值)也可以 .

1 回答

  • 2

    我想说最简单的方法就是创建自己的 struct ,它可以按照你想要的方式运行 . 我会做这样的事情:

    struct MyDict {
    
        private var dictionary = [String: Int]()
    
        subscript(key: String) -> Int? {
            get {
                return dictionary[key]
            }
            set {
                if newValue! != 0 {
                    dictionary[key] = newValue
                } else {
                    dictionary.removeValueForKey(key)
                }
            }
        }
    }
    

    但请记住,这个结构是一个字典,所以你必须实现你需要的每个功能 .

相关问题