2011-10-12 90 views
2

这里是我的代码如何将数组中的int值添加到NSNumber中?

我循环遍历数组并增加了NSNumber

NSNumber *totalValue = 0; 
NSMutableArray *items = [10, 35, 25]; // Just for demo 
for (int i=0; i < items.count; i++) 
{ 
    totalValue = totalValue + [items objectAtIndex:i] // How do I add the totalValue? 
} 

有人可以帮我用这段代码吗?

回答

7

NSNumber是一个Objective-C类。与C++不同,运算符不能在Objective-C中重载,因此您必须手动调用所有内容。

NSNumber *totalValue = [NSNumber numberWithInt:0]; 
for(…) { 
    totalValue = [NSNumber numberWithInt:[totalValue intValue] + [[items objectAtIndex:i] intValue]]; 
} 

您可能需要使用NSInteger代替,这是更快(特别是对于大量物品:内存分配是昂贵的):

NSInteger totalValueInteger = 0; // no pointer, NSInteger is a POD! 
for (…) { 
    totalValueInteger += [[items objectAtIndex:i] integerValue]; 
} 
NSNumber *totalValue = [NSNumber numberWithInteger:totalValueInteger]; 

你真的应该只使用NSNumber时你需要需要一个Objective-C对象,就像数组,字典或编码器一样。否则,请使用POD,如NSInteger,intdouble

+0

非常感谢您的帮助。 – HardCode

1

首先,你也许可以做到使用KVC这整个事情:

NSNumber *total = [items valueForKeyPath:@"@sum.integerValue"]; 

但是,为了回答你原来的问题,NSNumber是不可变的,这意味着你不能改变它或增加它的价值。在循环的每次迭代中创建新的NSNumber效率低下且浪费。

你应该使用标准intNSInteger总总结,然后将得到的值转换为NSNumber末,如果你需要它这样。

+0

这个简单的代码真棒! – HardCode

+0

我强烈怀疑这个虽然更具表达力,但执行起来会更慢。 – ipmcc

+1

在乐器中试用。然后决定在这种情况下绩效是否重要。 –

0

不妨将中间值设为int。

int temp = 0; 
for(…) { 
    temp += [[items objectAtIndex:i] intValue]; 
} 
NSNumber *totalValue = [NSNumber numberWithInt:temp]; 
相关问题