搜索具有大量元素的切片

不久前,我开发了一个 API,以使存储在两个不同系统中的记录保持同步。它一直运行良好,但是遇到了一个问题,我要同步的新表有大量记录。以下是基本前提。


table1 和 table2 是反映我试图保持同步的数据的结构片段。这适用于大约 20,000 条记录。但是我现在正在使用 200,000,这感觉效率不高,因为我有效地运行每一行可能 200,000 次,这会导致数十亿次循环。有没有更有效的方法来实现这一目标?


for _, item1 = range table1 {

    for _, item2 = range table2 {

        if item1.id == item2.id {

            itemsAreEqual = reflect.DeepEqual(item1, item2)

            if !itemsAreEqual {

               //Update Stuff

            }

        }

    }

}


繁星点点滴滴
浏览 101回答 1
1回答

慕码人2483693

如果表中元素的顺序不重要,请改用两个映射:for id1, item1:=range table1 {   if item2, ok:=table2[id1]; ok {     ...   }}如果您需要更新item1和item2成员,最好制作这些地图map[idType]*Item而不是map[idType]Item.如果顺序很重要,您可以对数组加映射执行相同操作:ids:=make(map[idType]*Item)for i,item:=range table2 {   ids[item.id]=&table2[i]}for id1, item1:=range table1 {   if item2, ok:=ids[id1]; ok {     ...   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go