你可以嘗試這樣的事情......
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倍。
(聯合國)幸運的是,它甚至不是最醜的解決方案,但毫無疑問它是快速的地獄,我不會推薦它除了速度真的的事情,因爲那種解決方案,可以提供效率真的很好。
我完全錯過使用志願這裏.... – Till 2013-02-17 21:07:14
點很簡單 - 寫代碼。您可能會想出使用KVO或任何其他保證更慢,更隱晦的「幻想」方案。除非這是進入一個晦澀難懂的代碼競賽或其他類似的東西,否則只需編寫代碼! – 2013-02-17 21:09:53
@Till,maddy向我解釋KVO與鍵值編碼不同。現在我明白你的評論。謝謝你的評論。 – 2013-02-18 01:07:36