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

У меня есть 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 Ответ

0 голосов
/ 07 января 2012

Я не знаю, насколько больше кто-то может помочь вам оптимизировать то, что вы делаете, потому что я не знаю, что происходит за кулисами (вне контекста фрагмента кода, который вы вставили выше, или того, что на самом деле происходитвнутри вашей 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]];
...