Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSDictionary用作其他NSDictionary';s键_Ios_Objective C - Fatal编程技术网

Ios 将NSDictionary用作其他NSDictionary';s键

Ios 将NSDictionary用作其他NSDictionary';s键,ios,objective-c,Ios,Objective C,我试图实现以下结构: 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 debugg

我试图实现以下结构:

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用作键。

如果对象符合
NSCopying
,则可以将其用作键,并且应该实现
哈希和
isEqual:
,以便按值而不是按标识进行比较

对于
散列
,字典遵循返回
[self count]
的数组约定。这是一个很糟糕的散列,但在技术上是有效的。这意味着您的外部字典最终将执行有效的线性搜索,但它会起作用

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


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

如果对象符合
NSCopying
,则可以将其用作键,并且应该实现
哈希
isEqual:
以按值而不是按标识进行比较

对于
散列
,字典遵循返回
[self count]
的数组约定。这是一个很糟糕的散列,但在技术上是有效的。这意味着您的外部字典最终将执行有效的线性搜索,但它会起作用

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


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

因此它们“可以”被使用,但结果不是预期的结果。感谢结果完全符合界面的要求。如果你的所有键都是具有相同项数的字典,不要认为你得到的是hashmap。因此它们“可以”被使用,但结果并不是你想要的。感谢结果完全符合界面的要求。如果所有键都是具有相同项数的字典,那么不要认为您得到的是hashmap。我认为
data1
data2
nil
,因为我已经测试了您的代码,它工作得很好。您确定
key1
testKey
是相等的吗?它们有相同的组件,但不是相同的目标这似乎是个坏主意。我认为
data1
data2
nil
,因为我已经测试了你的代码,它工作得很好。你确定
key1
testKey
是相等的吗?它们有相同的组件,但不是相同的目标这似乎是个坏主意。