NSMutableDictionary为每个值应用公式的最有效方法

时间:2012-01-07 14:23:20

标签: objective-c cocoa nsmutableset

我有一个带有NSNumbers的NSMutableDictionary。当我完成构建集合时,我需要使用当前存储的值本身重新计算所有值。现在我使用快速枚举并存储到新的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 :(得分:0)

我不知道有多少人可以帮助你优化你正在做的事情,因为我不知道幕后发生了什么(在你上面粘贴的代码片段的上下文之外,或者真正发生了什么在MyFormula函数内部。

我遇到的一个优化问题是:为什么要将所有内容存储为NSNumber个对象而不是doubles数组?这样做的唯一好处(我现在可以看到)是,如果您在NSNumberNSArrayNSSet中传递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]];