我正在尝试创建一个最初填充有零的NSMutableArray。随着时间的推移,数组元素会发生变化,我想对它们求和。下面的代码说明了我遇到的两个问题。首先,NSLog的输出应该给我一个零字符串,但它没有。即使我对数组什么都不做,我得到的输出是:
array[] = 14794004, 0, 0, 0, 1, 0, 0, 0, 0
array[] = 63, 30, 80828660, 80792872, 0, 80828564, 7478, 78955136, 1
NSLog行只是用来确认阵列的内容。那么,为什么数组元素不是零,为什么它们会自发地改变呢?一旦我解决了第一个问题,如何对数组元素求和?提前谢谢。
NSMutableArray *array;
int arraySum = 0;
array = [NSMutableArray arrayWithObjects: 0,0,0,0,0,0,0,0,0,nil];
NSLog(@"array[] = %i, %i, %i, %i, %i, %i, %i, %i, %i", array[0], array[1], array[2], array[3], array[4], array[5]), array[6], array[7], array[8];
for (int i = 0; i < 9; i++) {
arraySum = arraySum + array[i]; //Gives error: Invalid operands to binary + (have 'int' and 'struct NSMutableArry')
} //Isn't array[i] just one element and in this case a number?
NSLog(@"arraySum = %i", arraySum);
NSArray
使用Objective-C类,而不是内置的C数据类型。
此外,它没有下标运算符,这意味着你不能用检索它的内容
array[n];
你必须使用:
[array objectAtIndex:n];
注意从Xcode 4.5开始,编译器确实支持下标语法,该语法将在后台转换为适当的方法调用。因此array[n]
在现代Objective-C中是有效的。
如果要将数字类型(int
、long
、float
、double
…)存储在NSArray
中,则必须将它们封装在NSNumber
中。
NSArray* array = [NSMutableArray arrayWithObjects: [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], nil]
然后你会把内容总结如下:
for(NSNumber* num in array)
{
arraySum += [num intValue];
}
dandan78给出了明确的解释。
只需注意一点:NSArray/NSMutableArray是要与可可一起使用的DE-FACTO类。对于"C"程序员来说,它们有点奇怪,即使你看到"*",你也不能使用指针算法。
所以使用它们,但对于非常大的数值数组,与"C"数组相比,它们非常昂贵且速度缓慢。