我需要一个数组,我可以存储3个值,并计算它的平均值。 3秒后数组已满,我想刷新从数组的begin [0]开始的每个值。所以阵列的每3秒更新一次,我有最新的平均值。在我添加对象时,阵列不断增长。 这是我目前的代码:
//Inside function which loops every second so I can access myValue
self.myArray = [[NSMutableArray alloc] initWithCapacity:3];
[self.myArray addObject:[NSNumber numberWithDouble:myValue]];
for(int i = 0; i < self.myArray.count; i++) {
NSLog(@"Array %d: %@", i, self.myArray[i]);
}
输出
Array 0: 2
Array 1: 4
Array 2: 5
Array 3: 6
Array 4: 1
答案 0 :(得分:0)
检查数组的大小是否大于3.如果是,请删除最旧的元素。
以下是一种可能的实施方式:
Alloc并初始化数组:
self.myArray = [[NSMutableArray alloc] init];
插入新对象并删除最旧的对象:
[self.myArray insertObject:object atIndex:0];
if ( self.myArray.count > 3 )
{
[self.myArray removeLastObject];
}
答案 1 :(得分:0)
看起来您正在尝试计算每秒更新的运行平均值。这是一个可能适合您的简单替代方法。
初始化平均值:
runningAverage = myValue;
循环内部:
const int WEIGHT = 3;
runningAverage = (runningAverage * (WEIGHT - 1) + myValue) / WEIGHT;
这是输出的样子:
输入:1,2,3,4,101,6,7,8
(使用数组) 输出: - , - ,2,3,36,37,37,7
(使用跑步平均值) 输出:1,1.33,1.88,2.59,35.4,25.6,19.4,15.6