Objective C:重新填充大小的数组

Objective C: Array with size repopulate

我需要一个可以存储 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

只需检查数组的大小是否大于 3。如果是,请删除最早的元素。

这是一个可能的实现:

分配并初始化数组:

self.myArray = [[NSMutableArray alloc] init];

插入一个新对象并删除最旧的对象:

[self.myArray insertObject:object atIndex:0];

if ( self.myArray.count > 3 )
{
   [self.myArray removeLastObject];
}

您似乎在尝试计算每秒更新一次的 运行 平均值。这是一个可能适合您的简单替代方法。

初始化平均值:

runningAverage = myValue;

循环内部:

const int WEIGHT = 3;
runningAverage = (runningAverage * (WEIGHT - 1) + myValue) / WEIGHT;

输出结果如下:

输入:1、2、3、4、101、6、7、8

(使用数组) 输出:-, -, 2, 3, 36, 37, 38, 7

(使用 运行 平均值) 输出:1、1.33、1.88、2.59、35.4、25.6、19.4、15.6