あなたはこのようなことを試すことができます...
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
には、100個の数値の5つの異なるセクションの平均を含む5つの値が含まれます。
更新しました:
この部分は、特別な好奇心を持った目のためだけのものです。
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倍高速です。
(残念ながら)それは最も醜い解決策でもありませんが、それが地獄のように速いことは間違いありません。その種の解決策は本当に良い効率を提供できるので、速度が本当に重要である以外はお勧めしません。