新NSArray中NSArray和商店值的平均值

时间:2013-08-26 01:18:54

标签: objective-c nsmutablearray nsarray average

我希望得到我的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循环

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

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

}

任何人都可以用更有效的方式帮助我

谢谢

1 个答案:

答案 0 :(得分:5)

你只需要一个循环:

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 collection operator

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

显然,只有你想平均数组中的所有数字才有用,但在这些情况下它是一种方便的简写。