从切片中删除重复项
给定一个文本文件,其中包含表示为具有“Address”和“PeerID”的对象的对等点列表属性,任务是根据代码配置中“Bootstrap”切片中匹配的“Address”和“PeerID”删除所有重复的对等点。
为了实现此目的,我们迭代切片中的每个对等对象多次。在每次迭代期间,我们将其“PeerID”和“Address”与用户提供的值进行比较。如果找到匹配项,我们就会从切片中删除该特定对象。此过程可确保删除对等点的所有实例。
但是,需要考虑一种边缘情况。如果“Bootstrap”切片中的最后一个对等点是重复的,则代码将出现“切片超出范围”错误。为了解决这个问题,我们可以实现一个更强大的解决方案,将不匹配的值复制到切片的开头,并在迭代完成时修剪多余的值。
这是更新的代码:
i := 0 for _, v := range cfg.Bootstrap { if v.PeerId == peer.PeerId && v.Address == peer.Address { continue } cfg.Bootstrap[i] = v i++ } cfg.Bootstrap = cfg.Bootstrap[:i]
此代码迭代“Bootstrap”切片。对于每个对等对象,它将其“PeerID”和“Address”与用户提供的值进行比较。如果对等点不是重复项,则将其复制到索引“i”处的切片开头。然后“i”索引递增以指向下一个可用位置。
迭代完成后,“Bootstrap”切片将被修剪以删除任何多余的元素,从而有效地删除所有重复的对等点,包括最后一个.
以上是如何在 Go 中有效地从切片中删除重复的对等点?的详细内容。更多信息请关注PHP中文网其他相关文章!