你可以尝试这样的事情......
NSArray *_array = // with the 100 numbers... (I used NSNumber object for each number)
NSMutableArray *_averages = [NSMutableArray array];
for (int i = 0; i < 5; i++) [_averages addObject:@([[[_array subarrayWithRange:NSMakeRange(i * 20, 20)] valueForKeyPath:@"@avg.floatValue"] floatValue])];
将_averages
包含 5 个值,以及 100 个数字的五个不同部分的平均值。
更新:
这部分只是为了有额外好奇心的眼睛。
如果你试图避免NSObjects
和双for
循环,你可以实现一个非常快的算法,当然当你越低级别时,你也可以提高当前速度,问题是:它真的需要吗?
NSInteger _segments = 1000; // it means 20.000 numbers;
Float64 _numbers[(_segments * 20)]; // fill this array as you'd like.
Float64 _averages[_segments];
for (int i = 0; i < _segments; i++) {
NSInteger _offset = (_segments<<4)+4;
_averages[i] = (_numbers[_offset] + _numbers[_offset+1] + _numbers[_offset+2] + _numbers[_offset+3] + _numbers[_offset+4] + _numbers[_offset+5] + _numbers[_offset+6] + _numbers[_offset+7] + _numbers[_offset+8] + _numbers[_offset+9] + _numbers[_offset+10] + _numbers[_offset+11] + _numbers[_offset+12] + _numbers[_offset+13] + _numbers[_offset+14] + _numbers[_offset+15] + _numbers[_offset+16] + _numbers[_offset+17] + _numbers[_offset+18] + _numbers[_offset+19]) / 20.f;
}
double
它比使用for 循环和NSObject
类的解决方案快 10 倍。
(不)幸运的是,它甚至不是最丑陋的解决方案,但毫无疑问它快得要命,我不会推荐它,除非速度真的很重要,因为这种解决方案可以提供非常好的效率。