NSDictionary键和值的顺序

时间:2014-01-26 12:20:08

标签: objective-c nsdictionary

我知道在NSDictionary中,枚举时无法保证项目的顺序。

但是,期望[[myDictionary allValues] objectAtIndex:index]始终是密钥[[myDictionary allKeys] objectAtIndex:index]的匹配值是否安全? (假设字典是不可变的)。

1 个答案:

答案 0 :(得分:2)

即使两者很有可能在同一个订单中,Apple也可以随时更改,因为根本无法保证订单。

如果您需要两个NSArray,一个带有键,一个带有值,带有“并行”索引,更好的方法是通过枚举字典的键值对来自己构建这些数组,并且将它们添加到您构建的两个数组中:

NSMutableArray *keys = [NSMutableArray array];
NSMutableArray *vals = [NSMutableArray vals];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [keys addObject:key];
    [vals addObject:obj];
}];

您也可以单独获取密钥,然后通过调用objectsForKeys:notFoundMarker:方法获取具有并行索引的数组中的值:

NSArray *keys = [dict allKeys];
// In the call below, the marker [NSNull null] will not be used, because we know
// that all keys will be present in the dictionary.
NSArray *vals = [dict objectsForKeys:keys notFoundMarker:[NSNull null]];