为什么通过NSDictionary枚举不会返回输入序列



我注意到NSDictionary的枚举输出返回的顺序与添加项的顺序不同。

NSMutableArray *arrKeys;
NSMutableArray *arrValues;
NSDictionary *items;
arrKeys = [NSMutableArray arrayWithCapacity:5];
arrValues = [NSMutableArray arrayWithCapacity:5];
[arrKeys addObject:@"A"]; [arrValues addObject:@"First"];
[arrKeys addObject:@"B"]; [arrValues addObject:@"Second"];
[arrKeys addObject:@"C"]; [arrValues addObject:@"Third"];
[arrKeys addObject:@"D"]; [arrValues addObject:@"Fourth"];
[arrKeys addObject:@"E"]; [arrValues addObject:@"Last"];
items = [NSDictionary dictionaryWithObjects:arrValues forKeys:arrKeys];
for (NSString *aKey in items) {
    NSLog(@"%@=%@", aKey, [items valueForKey:aKey]);
}

返回。。。

A=第一个
D=第四个
B=秒
E=最后
C=第三个

我很感激Dictionary允许您按键随机访问项,但在枚举集合时,它们的返回顺序是任意的,这有什么道理吗?

仅此而已,NSDictionary不能保证迭代顺序。这与您期望的典型哈希表的行为一致——为快速查找而优化,但不为有序迭代而优化。

为什么不迭代您已经拥有的arrKeys呢?

最新更新