objective-c – 密钥和值的NSDictionary顺序

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

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

最佳答案 即使两者很有可能在同一个订单中,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:method获取具有并行索引的数组中的值:

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]];
点赞