1

我想获得我的 NSArray 元素的平均值,并以下列方式将它们存储在一个新数组中。

NSArray* number;
NSMutableArray* Average;

[Average objectAtIndex:0]=[number objectAtIndex:0];
[Average objectAtIndex:1]=([number objectAtIndex:0] + [number objectAtIndex:1])/2;
[Average objectAtIndex:2]=([number objectAtIndex:0] + [number objectAtIndex:1] + [number objectAtIndex:2])/3;

我正在考虑使用 2 个 for 循环

for (int i =0; i<[number count]; i++){
  for (int j=0; j<i; j++){
    temp+=[number objectAtIndex:j];
  }

[Average addObject: temp/(i+1)];

}

谁能用更有效的方式帮助我

谢谢你

4

1 回答 1

6

你只需要一个循环:

NSArray *numbers = @[@(2.4), @(2.7), @(4.0)];
NSMutableArray *averages = [NSMutableArray array];
double total = 0.0;

for (int i = 0; i < [numbers count]; i++) {
    total += [[numbers objectAtIndex:i] doubleValue];
    [averages addObject:@(total / (i + 1))];
}

或者,使用快速枚举:

__block double total = 0.0;

[numbers enumerateObjectsUsingBlock:^(NSNumber *number, NSUInteger idx, BOOL *stop) {
    total += [number doubleValue];
    [averages addObject:@(total / (idx + 1))];
}];

顺便说一句,与您的问题无关,但如果您只是想平均numbers数组中的所有数字,您可以使用KVC 集合运算符

NSNumber *average = [numbers valueForKeyPath:@"@avg.self"];

显然,这仅在您想平均数组中的所有数字时才有用,但在这些情况下它是一种方便的速记。

于 2013-08-26T01:32:02.683 回答