>  기사  >  백엔드 개발  >  Go의 슬라이스에서 중복 항목을 효율적으로 제거하는 방법은 무엇입니까?

Go의 슬라이스에서 중복 항목을 효율적으로 제거하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-02 01:53:02756검색

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

슬라이스에서 중복 항목 삭제

각 피어가 주소 및 PeerID로 특성화되는 텍스트 파일에서 중복 피어를 제거하려고 합니다. 제공된 코드는 이 작업을 효과적으로 처리하지만 마지막 중복 항목을 삭제할 때 오류가 발생합니다. 이 문제를 해결하기 위해 수정된 접근 방식이 제시됩니다.

시작하려면 변수 i를 선언하고 0으로 초기화합니다. 이 변수는 cfg.Bootstrap 슬라이스에서 중복되지 않은 마지막 피어의 인덱스를 추적합니다. 그런 다음 범위 기반 for 루프를 사용하여 슬라이스를 반복합니다.

루프 내에서 현재 피어의 Address 및 PeerID가 제거할 피어의 주소 및 PeerID와 일치하는지 확인합니다. 그렇다면 현재 피어를 건너뜁니다. 그렇지 않으면 현재 피어를 cfg.Bootstrap[i]에 할당하고 i를 증가시킵니다.

루프가 완료된 후 cfg.Bootstrap[i:]에는 제거해야 하는 중복 피어만 포함됩니다. 이러한 초과 값을 잘라내려면 cfg.Bootstrap[:i]를 다시 cfg.Bootstrap에 할당합니다.

수정된 코드 조각은 다음과 같습니다.

<code class="go">i := 0
for _, v := range cfg.Bootstrap {
   if v.PeerId == peer.PeerId &amp;&amp; v.Address == peer.Address {
      continue
   }
   cfg.Bootstrap[i] = v
   i++
}
cfg.Bootstrap = cfg.Bootstrap[:i]</code>

이 수정된 접근 방식은 모든 중복 피어를 효율적으로 삭제합니다. 마지막 위치에도 포함됩니다.

위 내용은 Go의 슬라이스에서 중복 항목을 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.