首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中重写字典的默认行为以忽略零值?

在Swift中重写字典的默认行为以忽略零值?
EN

Stack Overflow用户
提问于 2015-03-10 15:01:21
回答 1查看 1.4K关注 0票数 0

我想创建一个数据类型,它的作用类似于字典,但忽略了值为零的任何键,例如,假设示例:

代码语言:javascript
复制
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

我不确定这样做是否更好:

  • 重写==以提供这种行为,每次比较两个字典时都要付出代价
  • 重写updateValue(_:forKey:),以便每当我们尝试将值设置为0时,它只是从字典中移除相应的键(首选)
  • 尝试完全不同的数据类型。

或者,创建带有固定键列表的字典(即不能添加或移除键,只需更改它们的值)的方法也会有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 15:41:09

我想说最简单的方法是创建您自己的struct,它以您想要的方式运行。我会这样做:

代码语言:javascript
复制
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)
            }
        }
    }
}

但是请记住,这个结构是而不是字典,所以您必须实现所需的每个函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28967100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档