我知道在NSDictionary
中,枚举时无法保证项目的顺序。
但是,期望[[myDictionary allValues] objectAtIndex:index]
始终是密钥[[myDictionary allKeys] objectAtIndex:index]
的匹配值是否安全? (假设字典是不可变的)。
答案 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]];