首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSDictionary作为其他NSDictionary的密钥

使用NSDictionary作为其他NSDictionary的密钥
EN

Stack Overflow用户
提问于 2014-08-20 22:47:07
回答 1查看 129关注 0票数 0

我正在努力实现以下结构:

代码语言:javascript
复制
NSMutableDictionary *dict = [@{} mutableCopy];

NSDictionary *key1 = @{@"id_format": @(1), @"date": @"2014-08-01"};
NSDictionary *key2 = @{@"id_format": @(2), @"date": @"2014-08-02"};

// This runs perfect and can be checked in llvm debugger
// data1 & data2 are NSArray that contain several NSDictionary
[dict setObject:data1 forKey:key1];
[dict setObject:data2 forKey:key2];

// Later, if i try to access dict using another key, returns empty NSArray
NSDictionary *testKey = @{@"id_format": @(1), @"date": @"2014-08-01"}; // Note it's equal to "key1"

for(NSDictionary *dictData in dict[testKey]){
// dictData is empty NSArray
}

// OR

for(NSDictionary *dictData in [dict objectForKey:testKey]){
// dictData is empty NSArray
}

因此,问题是是否可以使用NSDictionary作为密钥,或者不使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 22:56:03

如果一个对象符合NSCopying,那么它可以作为键使用,并且应该实现hashisEqual:,以根据值而不是通过标识进行比较。

字典遵循返回[self count] for hash的数组惯例。所以这是一个非常糟糕的哈希,但在技术上是有效的。这意味着你的外部字典最终会做什么实际上是线性搜索,但它会工作。

字典实现并正确响应isEqual:。他们还实现了NSCopying

因此,您可以使用字典作为字典键。

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

https://stackoverflow.com/questions/25415712

复制
相关文章

相似问题

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