1

我有一个带有 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 的原因)。

4

1 回答 1

0

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

我遇到的一个优化问题是:为什么要将所有内容都存储为NSNumber对象而不是数组doubles?这样做的唯一优势(我目前可以看到)是,如果您将NSNumber对象传递到NSArray,NSSet或者NSDictionary写入磁盘或传递到NSNotificationor 中。

但我会做的一些事情包括摆脱额外的、不必要的调用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似乎不是 a NSMutableSet,因为您正在NSMutableDictionary执行setObject:forKey:. 如果target_results真的是 a NSMutableSet,你只需要调用:

[target_results addObject: [NSNumber numberWithDouble: formula_score]];
于 2012-01-07T14:33:49.147 回答