我正在努力实现以下结构:
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作为密钥。
答案 0 :(得分:4)
如果某个对象符合NSCopying
,则该对象可以用作密钥,并且应该实现hash
和isEqual:
来按值而不是按身份进行比较。
字典遵循为[self count]
返回hash
的数组约定。所以这是一个非常糟糕的哈希,但它在技术上是有效的。这意味着你的外部字典最终将完成有效的线性搜索,但它可以工作。
字典实现并正确回复isEqual:
。他们还实施NSCopying
。
因此,您可以使用字典作为字典键。