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];
}
}