Objective-C Быстрый способ сравнить и заменить значение NSMutableDictionary

У меня есть 2 разных длины NSMutableDictionary, как это:

Dic 1: {
0 = 22962;
10 = 11762;
11 = 11762;
12 = 11761;
13 = 11761;
2 = 11762;
3 = 11761;
4 = 11763;
5 = 11763;
6 = 11763;
7 = 11763;
8 = 11763;
9 = 11762;}

Dic 2: {
11756 = "<EPinObject: 0x17009f860>";
11761 = "<EPinObject: 0x17409f950>";
11757 = "<EPinObject: 0x1700973e0>";
11762 = "<EPinObject: 0x17409f9f0>";
11758 = "<EPinObject: 0x174280410>";
11763 = "<EPinObject: 0x17409fa40>";
11759 = "<EPinObject: 0x174280460>";
11760 = "<EPinObject: 0x1742804b0>";
22962 = "<EPinObject: 0x17409f9a0>";}

Я хочу сделать Dic 3 так:

Dic 3: {
0 = "<EPinObject: 0x17409f9a0>";
10 = "<EPinObject: 0x17409f9f0>";
...
9 = "<EPinObject: 0x17409f9f0>";}

DIC 1 имеют аналогичное значение для diff-ключа, поэтому я должен поставить так

Сейчас я делаю это, используя 2 for-in, но кажется, что это занимает слишком много времени и слишком много циклов. Интересно, есть ли более быстрый способ сравнить значение dic1 с ключом dic2 и сгенерировать dic3?

1 ответ

Решение

Один для:

dict3 = [dict1 mutableCopy]
for (id<NSCopying> key in dict3.allKeys) {
    dict3[key] = dict2[dict3[key]];
}

Если вам не нужно перезаписывать значения, которых нет в dict2 (например, есть dict1[15] == 12345, но dict2[12345] == nil), вы можете добавить нулевую проверку:

for (id<NSCopying> key in dict3.allKeys) {
    if (dict2[dict3[key]]) {
        dict3[key] = dict2[dict3[key]];
    }
}

ОБНОВЛЕНИЕ: с улучшениями @Caleb (и небольшой оптимизацией):

for (id key in dict1) {
    id dict3Value = dict3[key]; //so we don't have to get this value twice
    if (dict2[dict3Value]) {
        dict3[key] = dict2[dict3Value];
    }
}
Другие вопросы по тегам