不久前,我开发了一个 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 {
...
}
}
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消