루프 내 슬라이스 요소 제거
루프 내 슬라이스에서 요소를 효과적으로 제거하는 것은 까다로울 수 있습니다. 올바르지 않지만 일반적인 접근 방식은 범위 기반 루프 내에서 추가를 사용하는 것입니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!