0

我注意到 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=第三个

我很欣赏字典允许您按键随机访问项目,但是在枚举集合时返回的任意顺序是否有一些理由?

4

1 回答 1

3

就是这样,NSDictionary不保证迭代顺序。这与您对典型哈希表的预期行为一致——针对快速查找进行了优化,但不适用于有序迭代。

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

于 2012-07-09T06:29:15.633 回答