【问题标题】:Why does enumerating though a NSDictionary not return the input sequence?为什么枚举 NSDictionary 不返回输入序列?
【发布时间】:2012-07-08 13:14:40
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c nsdictionary


    【解决方案1】:

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

    为什么不遍历你已经拥有的arrKeys

    【讨论】:

    • 这只是我们将字典转换为 JSON 时出现的一个观察结果。这对这种情况并不重要,但将来可能会有另一个重要的场合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多