我希望得到我的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)];
}
任何人都可以用更有效的方式帮助我
谢谢
答案 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"];
显然,只有你想平均数组中的所有数字才有用,但在这些情况下它是一种方便的简写。