Go의 루프 내 슬라이스에서 요소를 제거하는 방법: 모범 사례는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-28 05:01:30
원래의
190명이 탐색했습니다.

How to Remove Elements from a Slice Within a Loop in Go: What Are the Best Practices?

루프 내 슬라이스 요소 제거

루프 내 슬라이스에서 요소를 효과적으로 제거하는 것은 까다로울 수 있습니다. 올바르지 않지만 일반적인 접근 방식은 범위 기반 루프 내에서 추가를 사용하는 것입니다.

<code class="go">for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
로그인 후 복사

그러나 이 접근 방식을 사용하면 루프 변수가 동기화되지 않고 요소를 건너뛰게 됩니다.

올바른 루프 기반 제거

대신, 요소를 제거한 후 루프 변수를 수동으로 감소시키는 것을 고려하십시오:

<code class="go">for i := 0; i < len(a); i++ {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
        i--
    }
}
로그인 후 복사

여러 제거를 위한 하향 루프

여러 요소를 제거해야 하는 경우 하향 루프를 사용하면 이동된 요소가 루프 반복 외부에 유지됩니다.

<code class="go">for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
로그인 후 복사

많은 제거를 위한 대체

광범위한 제거의 경우 수많은 복사 작업을 피하면서 제거할 수 없는 요소를 새 슬라이스에 복사하는 것이 좋습니다.

<code class="go">b := make([]string, len(a))
copied := 0
for _, s := range(a) {
    if !conditionMeets(s) {
        b[copied] = s
        copied++
    }
}
b = b[:copied]</code>
로그인 후 복사

순환을 통한 내부 제거

수행 방법 -제거 위치, 두 개의 인덱스 유지, 제거된 요소를 0으로 만드는 동안 제거할 수 없는 요소 할당:

<code class="go">copied := 0
for i := 0; i < len(a); i++ {
    if !conditionMeets(a[i]) {
        a[copied] = a[i]
        copied++
    }
}
for i := copied; i < len(a); i++ {
    a[i] = "" // Zero places of removed elements
}
a = a[:copied]</code>
로그인 후 복사

위 내용은 Go의 루프 내 슬라이스에서 요소를 제거하는 방법: 모범 사례는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!