我有一个带有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的原因)。
答案 0 :(得分: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]];