登录
首页 >  Golang >  Go问答

在切片中搜索大量元素

来源:stackoverflow

时间:2024-02-25 09:18:27 302浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《在切片中搜索大量元素》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

不久前我开发了一个 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
            }
        }
    }
}

解决方案


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

for id1, item1:=range table1 {
   if item2, ok:=table2[id1]; ok {
     ...
   }
}

如果您需要更新 item1item2 成员,最好将这些映射设为 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 {
     ...
   }
}

今天关于《在切片中搜索大量元素》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>