我正在努力实现以下结构:
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作为密钥,或者不使用。
发布于 2014-08-20 22:56:03
如果一个对象符合NSCopying,那么它可以作为键使用,并且应该实现hash和isEqual:,以根据值而不是通过标识进行比较。
字典遵循返回[self count] for hash的数组惯例。所以这是一个非常糟糕的哈希,但在技术上是有效的。这意味着你的外部字典最终会做什么实际上是线性搜索,但它会工作。
字典实现并正确响应isEqual:。他们还实现了NSCopying。
因此,您可以使用字典作为字典键。
https://stackoverflow.com/questions/25415712
复制相似问题