2012-01-07 2 views
1

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

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).

ответ

0

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