【问题标题】:Objective C: Array with size repopulate目标 C:重新填充大小的数组
【发布时间】:2015-05-16 15:56:38
【问题描述】:

我需要一个可以存储 3 个值并计算其平均值的数组。 3s 后数组已满,我想从数组的 begin [0] 开始刷新每个值。所以每隔 3s 数组就会更新一次,我有最近的平均值。在我添加对象的那一刻,数组不断增长。 这是我目前拥有的代码:

//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

【问题讨论】:

    标签: ios objective-c arrays nsarray


    【解决方案1】:

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

    这是一种可能的实现方式:

    分配并初始化数组:

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

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

    [self.myArray insertObject:object atIndex:0];
    
    if ( self.myArray.count > 3 )
    {
       [self.myArray removeLastObject];
    }
    

    【讨论】:

    • 嗨,谢谢回答!我已经尝试过您的示例,但是前两个值始终保持不变。你知道怎么处理吗?
    • 这很奇怪。您确定您使用的是[self.myArray insertObject:object atIndex:0];[self.myArray removeLastObject]; 吗?
    • 哦该死的我忘了在Index:0 处添加我的对象……现在它可以工作了!感谢您帮助我和快速响应!周末愉快!
    • 太棒了!如果有帮助,您可以接受答案(单击复选标记)并投票(单击向上箭头)。也享受周末吧。 :-)
    【解决方案2】:

    您似乎正在尝试计算每秒更新的运行平均值。这是一种可能对您有用的简单替代方法。

    初始化平均值:

    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

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多