如何比较两个arraycollection

时间:2012-07-23 21:30:54

标签: actionscript-3 flex

我使用(arA)填充数据网格。 此arraycollection是httpService的resultEvent。 的ArrayCollection 由于我的datagrid必须是uptodate,我使用计时器来查询数据库并查看是否存在新记录。 今天,每次进行查询时,我都会刷新数据网格。 但是,这种方向对用户体验不利。

所以,我有一个新的想法,将更新httpservice的结果存储在一个新的arraycollection(ArB)中并比较两个arraycollection。但我不知道该怎么做。

可以,你帮助我或提供更好的解决方案。

由于

6 个答案:

答案 0 :(得分:2)

使用Flex,您可能需要尝试mx.utils.ObjectUtil进行比较。

public function compare(arrayCollection1:ArrayCollection, arrayCollection2:ArrayCollection):Boolean
{
    if (arrayCollection1.length != arrayCollection2.length)
        return false;

    for (var i:uint = 0; i < arrayCollection1.length; i++)
    {
        if (ObjectUtil.compare(arrayCollection1[i], arrayCollection2[i]) != 0)
            return false;
    }

    return true;
}

这是计算密集型的;因此,您可能需要考虑更改您的方法,以便在上次收到数据时包含时间戳或索引。在您的Web服务中,该时间戳可以作为参数传递。然后,您的Web服务将更精简,仅返回上次调用的增量。

答案 1 :(得分:0)

在我看来,你可以试试这样的方法:

1-存储在DB中的数据将具有字段updateDate,这是该字段的最新更新时间。

2-每次查询新/更新/删除项目时,只需加载更新项目。 (使用这种方法,删除的项目不会真正从系统中删除,只需将其标志更新为已删除)。

3-比较更新的数组与当前数组时,您只需要比较当前数组中对象的id与更新数组中对象的id,并相应地更新它。

这种方法与上述www.Flextras.com上的评论类似。

答案 2 :(得分:0)

我建议这样做:

  • 使用Array作为缓冲区。

  • 将缓冲区大小设置为合理的大小。说10条记录。

  • 只要缓冲区已满或在您指定的时刻填充网格 - 以先到者为准。

答案 3 :(得分:0)

我建议你可以通过以下方式完成:

#1

每个记录都有自己的id,因此你可以在id字段上比较本地arraycollection和远程arraycollection,然后将新记录添加到本地arraycollection。

#2

在服务器中添加新的api以支持带有id的分页。

例如:

getRecord(fromid,-1)会将记录从“从id”返回到最新记录。 getRecord(fromid,toid)将从和返回记录。

答案 4 :(得分:0)

我会考虑在带有时间戳的响应中有一个last_modify字段,因此您可以检查响应的长度,即,响应的last_modify字段是否大于前一个last_modify是因为有更改在数据中,但您需要从后端获得一些帮助以允许此更改

答案 5 :(得分:-1)

如果数组集合具有相同的长度:

public function foo(coll1:ArrayCollection, coll2:ArrayCollection):void 
{
    if (coll1.length == coll2.length) 
    {
        for (var i:int = 0; i < coll1.length; i++) 
        {
            if (coll1[i].first != coll2[i].first || coll1[i].last != coll2[i].last) 
            {
                Alert.show("Different");
                return;
            }
       }
    }

   Alert.show("Same");
}