【问题标题】:Efficiently splicing items from an array using Flex使用 Flex 高效拼接数组中的项目
【发布时间】:2009-08-14 19:04:02
【问题描述】:

我已经克服了一个问题,但我的解决方案似乎效率低下且笨拙。请考虑这个问题:

我有一个包含文章的数组集合。

此数组集合被过滤到当前选定的文章类别。

有一个光标绑定到显示当前文章的视图。

当一个类别被删除时,我需要删除孤立的文章,我不能使用游标或集合而不影响视图,因为它们是绑定的。

我可以迭代源代码,但如果我从源代码中删除(拼接),我必须中断并重新开始,因为所有文章索引都会更改,即使使用 for each 也是如此。

这似乎是一种非常低效的做事方式,我相信有更好的方法可以做到这一点,要么在同一源上使用另一个迭代器,要么在我完成更新之前解除绑定视图等

如果我错过了一个技巧,请告诉我,因为我确信这是一个非常常见的问题/问题。

谢谢

罗伯

附言这是在我的 iPhone 上写的。如有错误请见谅!

【问题讨论】:

    标签: apache-flex flash actionscript-3 air


    【解决方案1】:

    向后运行循环。

    所以,不如说:

    var len:int = arr.length;
    for(var i:int = 0; i < len; i++) {
        if(some condition) {
            arr.splice(i,1);
        }
    }
    

    这样做:

    for(var i:int = arr.length - 1; i >= 0; i--) {
        if(some condition) {
            arr.splice(i,1);
        }
    }
    

    【讨论】:

    • 愚蠢的微优化:在几毫秒的提升中做一个预先递减而不是一个帖子
    【解决方案2】:

    最简单的解决方案可能是将需要删除的索引保存在临时数组中。然后在您遍历集合后,返回并删除临时数组中的项目。

    但据我所知,您可能应该使用散列(对象)或其他东西而不是数组结构。

    【讨论】:

    • 我试过了,但是一旦你删除了一个项目(拼接),其他索引就不再正确了!
    • 排序索引,从末尾删除。再次考虑使用不同的数据结构。
    • 只是一个简单的问题,你能告诉我一个使用对象的例子,以及你如何在它上面使用像数组集合这样的东西(或实现一个 iViewCollection)
    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 2020-12-25
    • 2015-01-06
    • 2012-07-16
    • 2016-07-12
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多