2013-08-26 53 views
0

我想有我的NSArray元素的平均值,并以下列方式将它们存储在一个新的数组中。NSArray的平均值和商店价值在一个新的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)]; 

} 

谁能帮助我更有效的方式

谢谢

回答

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"]; 

很显然,如果你想对数组中的所有数字求平均值,那么这是很有用的,但在这些情况下它是一个方便的简写。

+0

KVO毫无疑问是最简洁的方法;) – brandonscript