NSMutableDictionary наиболее эффективный способ применения формулы для каждого значения

У меня есть NSMutableDictionary с NSNumbers. Когда я закончу создание набора, мне нужно пересчитать все значения, используя само сохраненное в данный момент значение. Сейчас я использую быстрое перечисление и сохранение в новый NSMutableSet, но у меня нет опыта в Objective C, и должен быть более эффективный способ сделать это:

for (id key in temp_target_results) 
{
        formula_score = MyFormula([[temp_target_results objectForKey:key] doubleValue]);

        [target_results setObject:[NSNumber numberWithDouble:formula_score] forKey:key];
}

В конце я сортирую по значению (вот почему я использую NSMutableSet).

1 ответ

Я не знаю, насколько больше кто-то может помочь вам оптимизировать то, что вы делаете, потому что я не знаю, что происходит за кулисами (вне контекста фрагмента кода, который вы вставили выше, или того, что действительно происходит внутри вашего MyFormula функция).

У меня есть один вопрос по оптимизации: почему вы храните все как NSNumber объекты в любом случае, а не массив doubles? Единственное преимущество (которое я сейчас вижу) - это если вы передаете NSNumber объекты вдоль в NSArray, NSSet или же NSDictionary который записывается на диск или передается в NSNotification или же.

Но некоторые вещи, которые я бы сделал, включают избавление от этого лишнего, ненужного вызова objectForKey:

for (NSNumber * myNumber in temp_target_results) 
{
   formula_score = MyFormula([myNumber doubleValue]);

   [target_results setObject:[NSNumber numberWithDouble:formula_score] forKey:[myNumber stringValue]];
}

Еще одно соображение здесь:

Ваш target_results кажется не NSMutableSet потому что вы делаете NSMutableDictionary метод setObject:forKey:, Если target_results действительно был NSMutableSetВам нужно всего лишь позвонить:

[target_results addObject: [NSNumber numberWithDouble: formula_score]];
Другие вопросы по тегам