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

时间:2015-05-16 15:56:38

标签: ios objective-c arrays nsarray

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

2 个答案:

答案 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