如何在nsdictionary/nsmutabledictionary中使用自定义类型的键
来源:互联网 发布:左归丸与知柏地黄丸 编辑:程序博客网 时间:2024/05/14 12:46
如何在NSDictionary/NSMutableDictionary中使用自定义类型的键
背景
写了个记账APP,记录一下平时和她在一起时的花销,想要实现的一个功能是根据新建记录项的时刻从历史记录中自动推荐一个合适的花销项。这样在记录一些平时比较规律的花销时可以很方便。
那么问题来了
由于没找到小顶堆相关的类,所以就拿NSMutableDictionary来实现。花销项作为key,value则用来记录同一花销出现的次数。由于我的每一项花销是一个自定义类型,导致NSMutableDictionary认为所有的key都不相同,无法实现功能。
解决
首先想到需要自定义判断是否相等的方法,查看NSObject可以发现,该方法确实存在,在我的自定义花销项类型中重写该方法:
-(BOOL)isEqual:(id)object;
然而并没有解决…于是
赶快百度,有幸找到了这篇博文。**原来**NSDictionary判断两个键是否相等一共有两步:
- 首先对比二者的hash,如果不相同则直接返回NO
- 然后才调用isEqual方法进行判断
也就是说,还需要重写
-(NSUInteger)hash
至于如何计算hash值依然是参考了上面博文:
-(NSUInteger)hash{ return 0;}
对,直接返回了0。这样就直接通过isEqual来比较啦,毕竟isEqual函数也并不复杂。
另外
注意字典的KeyType是id类型,这意味着自定义类型需要遵循NSCopying协议,并实现
- (id)copyWithZone:(NSZone *)zone
也行正如上述博文所说,字典大概总是会拷贝一份新的对象作为键吧。就像C++那样。
0 0
- 如何在nsdictionary/nsmutabledictionary中使用自定义类型的键
- iOS中NSDictionary和NSMutableDictionary的用法
- iOS中NSDictionary和NSMutableDictionary的用法
- NSDictionary和NSMutableDictionary的基本使用
- NSDictionary与NSMutableDictionary的基本使用
- NSDictionary&& NSMutableDictionary使用
- ios------NSDictionary、NSMutableDictionary使用小结
- Objective-C中NSDictionary和NSMutableDictionary的基本用法
- NSDictionary和NSMutableDictionary类常用方法的使用
- Ojbect-C2 4、NSDictionary和NSMutableDictionary字典的使用
- OC_ 关于NSdictionary NSMutableDictionary以及包装类的使用
- OC关于NSDictionary和NSMutableDictionary方法的使用
- NSDictionary和NSMutableDictionary的用法
- NSDictionary、NSMutableDictionary的基本用法
- NSDictionary、NSMutableDictionary的基本用法
- NSDictionary、NSMutableDictionary的基本用法
- NSDictionary、NSMutableDictionary的基本用法
- NSDictionary、NSMutableDictionary的基本用法
- 书写是为了更好的思考
- PHP KMP算法实现
- ThreadLocal:多线程共享资源安全访问新思路
- 里氏替换原则
- 并发常见问题
- 如何在nsdictionary/nsmutabledictionary中使用自定义类型的键
- Time类的运算符重载
- ListView优化--ViewHolder
- Eclipse常用优化
- 三极管做开关电路,基极和发射极之间并联一个电阻,有什么作用?
- 需要读的文章列表
- JavaScript实现全选全不选复选框
- CSDN博客里markdown中想引用html标签怎么添加?
- mock