Как скопировать значения из NSMutableDictionary на карту?

Мне нужно принять NSMutableDictionary пар ключ-значение строк, и мне нужно скопировать в карту STL. Есть ли простой способ сделать это?
Я пробовал это, но это не работает.

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"10" forKey:@"6"];
[dictionary setObject:@"10" forKey:@"7"];
[dictionary setObject:@"10" forKey:@"8"];

NSEnumerator *enumerator = [dictionary keyEnumerator];
NSString *key;
while ((key = [enumerator nextObject])) {
std::string *keyString = new std::string([key UTF8String]);
std::string *valueString = new std::string([[dictionary objectForKey:key] UTF8String]);
map[*keyString] = *valueString;
}

1

Решение

Почему вы используете new совсем? Просто передайте результаты -UTF8String непосредственно на карту, и он превратит их в std::stringдля вас:

map[[key UTF8String]] = [[dictionary objectForKey:key] UTF8String];

Ваш существующий new код не только бесполезен, но и пропускает строки.


Вы также должны бросить NSEnumerator, У нас были лучшие способы перечислить словарь в течение ряда лет. В частности, вы можете использовать быстрое перечисление или перечисление на основе блоков. Быстрый цикл перечисления выглядит так:

for (NSString *key in dictionary) {
map[[key UTF8String]] = [[dictionary objectForKey:key] UTF8String];
}

Перечисление на основе блоков будет выглядеть так:

// if map is a local variable it must be declared with __block
// like __block std::map<std::string,std::string> map;
// If it's static, global, or an instance or member variable, then it's fine as-is
[dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop){
map[[key UTF8String]] = [value UTF8String];
}];

В этом случае я бы порекомендовал цикл быстрого перечисления, потому что он не требует изменения объявления map,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector