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