【问题标题】:Remove a term from an array during a for loop在 for 循环期间从数组中删除一个术语
【发布时间】:2014-04-16 01:45:36
【问题描述】:

我一直在创建一个用于存储对象的系统,这些对象会在指定的时间段内持续存在,然后将它们自己删除。但是,我在弄清楚如何在 for 循环运行时从数组中删除过期项目时遇到了一些麻烦(以尽量减少通过数组的额外迭代)

这是我到目前为止所做的。列表中的术语用布尔值标记,表明它们已完成。

For i = 0 To VisualEffects.Count - 1 Step 1 VisualEffects(i).Update(gt) VisualEffects(i).Draw(sb, Pos, Cam) If VisualEffects(i).CD.isExpired() Then VisualEffects.RemoveAt(i) i = -1 End If

    Next

为什么会产生错误?如何从数组中删除一个术语并继续遍历循环的其余部分?

问候

战神

【问题讨论】:

    标签: arrays vb.net for-loop


    【解决方案1】:

    线

    i = -1
    

    将i 设置为-1,导致For 循环终止。

    如果可以,请颠倒循环的顺序,以便从最后一个数组元素开始倒计时。这使得删除逻辑更加直接。

    【讨论】:

    • @user2891327,不,它应该不是i -= 1。你应该做两个答案都告诉你做的事情,而不是那样。
    【解决方案2】:

    .NET 数组是固定大小的,因此您实际上根本无法从数组中删除元素。您可以更改元素的值,因此可以将元素设置为 Nothing 以删除它所引用的对象,但该元素仍然存在。如果您阅读 Array 类的 MSDN 文档,您会看到 RemoveAt 方法因此会抛出 NotSupportedException。

    如果您实际上使用的是集合而不是数组,则可以调用 RemoveAt,但您需要从最后一个索引循环到第一个索引,而不是从第一个索引到最后一个索引。这样,删除项目不会影响您尚未访问的项目的索引。

    【讨论】:

    • 鉴于显然没有编译错误,听起来像是一个集合或列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2019-06-24
    • 2013-05-29
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多