为了账号安全,请及时绑定邮箱和手机立即绑定

搜索具有大量元素的切片

搜索具有大量元素的切片

Go
繁星点点滴滴 2022-05-10 16:21:33
不久前,我开发了一个 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            }        }    }}
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

如果表中元素的顺序不重要,请改用两个映射:


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 {

     ...

   }

}


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信