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

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

Опубликовано 22 декабря 2024 г.
Просматривать:760

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

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

В вашей ситуации вы столкнулись с проблемой при удалении повторяющихся элементов из фрагмента, поскольку вы повторяя итерацию среза и удаляя элементы во время итерации. Это может привести к ошибкам индексирования и панике, если повторяющийся элемент находится в конце среза.

Для решения этой проблемы более эффективным подходом является копирование уникальных элементов в начало среза, а затем обрезка. любые лишние элементы после этого. Вот как это можно сделать:

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]

В этом коде:

  • Мы инициализируем переменную i значением 0, которое представляет позицию индекса в новом, обрезанном срезе.
  • Мы перебираем каждый элемент cfg.Bootstrap.
  • Если элемент соответствует обоим предоставленные пользователем PeerID и адрес, мы пропускаем их.
  • В противном случае мы копируем элемент на i-ю позицию в новом срезе.
  • Мы увеличиваем i до следующей позиции.
  • После цикла мы назначаем новый фрагмент cfg.Bootstrap и усекаем его до нужной длины.

Это подход гарантирует, что все повторяющиеся элементы будут удалены, а срез останется единообразным на протяжении всего процесса. Это позволяет избежать ошибок индексирования и паники, которые могут возникнуть при удалении элементов во время итерации.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3