2011-10-12 65 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];