«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно удалить повторяющиеся одноранговые узлы из среза в Go?

Как эффективно удалить повторяющиеся одноранговые узлы из среза в Go?

Опубликовано 17 ноября 2024 г.
Просматривать:534

How to Efficiently Remove Duplicate Peers from a Slice in Go?

Удаление повторяющихся элементов из фрагмента

Данный текстовый файл содержит список одноранговых узлов, представленных в виде объектов с «Адрес» и «PeerID» атрибуты, задача состоит в том, чтобы удалить все дубликаты одноранговых узлов на основе совпадения «Адрес» и «PeerID» из фрагмента «Bootstrap» в коде. Configuration.

Для достижения этого мы перебираем каждый одноранговый объект в срезе несколько раз. Во время каждой итерации мы сравниваем его «PeerID» и «Адрес» со значениями, предоставленными пользователем. Если совпадение найдено, мы удаляем этот конкретный объект из среза. Этот процесс гарантирует удаление всех экземпляров однорангового узла.

Однако следует учитывать крайний случай. Если последний одноранговый узел в срезе «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» и «Адрес» со значениями, предоставленными пользователем. Если партнер не является дубликатом, он копируется в начало среза с индексом «i». Затем индекс «i» увеличивается, чтобы указать на следующую доступную позицию.

После завершения итерации срез «Bootstrap» обрезается, чтобы удалить все лишние элементы, эффективно удаляя все повторяющиеся одноранговые узлы, включая последний. .

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3