Objective-C:用 0 提交一个 NSMutableArray 并对其内容求和



我正在尝试创建一个最初填充有零的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中是有效的。

如果要将数字类型(intlongfloatdouble…)存储在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"数组相比,它们非常昂贵且速度缓慢。

最新更新