Core Foundation имеет отличную функцию, CFDictionaryApplyFunction
(хотелось бы, чтобы они также перенесли его функциональность на NSDictionary
). Однако NSDictionary
и CFDictionary
являются «бесплатными мостами», что означает, что вы можете разыгрывать между ними бесплатно.
Итак, решением было бы создать функцию applier, SaveName
, которая будет использоваться в CFDictionaryApplyFunction
выше. Пример:
void SaveName(const void* key, const void* value, void* context) {
NSMutableDictionary* result = (NSMutableDictionary*) context;
NSDictionary* dataDict = (NSDictionary*) value;
NSString* letterKey = (NSString*) key;
[result setObject:[dataDict valueForKey:@"Name"] forKey:@letterKey];
}
void main() {
NSDictionary* exampleDict = .. ;
NSMutableDictionary* resultDict = [NSMutableDictionary dictionary];
CFDictionaryApplyFunction((CFDictionaryRef)exampleDict, SaveName, (void*)resultDict);
// now, the resultDict contains key-value pairs of letter-name!
}
В моем коде предполагается, что в словаре «значение» есть только один объект. Вы можете изменить SaveName
, чтобы учесть свою собственную структуру данных, но это в основном способ сделать это.