슬라이스 루프 내에서 내부 요소 제거
문제:
슬라이스 요소 액세스 for 루프 내에서 i를 제거하고 추가()를 사용하여 제거하는 것은 문제가 있습니다. 루프 변수(i)를 증가시키면 제거 후 후속 요소를 건너뛰어 처리가 불완전해질 수 있습니다.
모범 사례:
1. 수동 루프 변수 감소
수동 루프 변수(i) 요소가 제거될 때 감소하는 일반 for 루프를 사용합니다.
<code class="go">for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
2. 하향 루프
또는 하향 루프를 사용하여 수동 감소를 방지합니다.
<code class="go">for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }</code>
3. 제거할 수 없는 요소 복사
많은 요소를 제거해야 하는 경우 제거할 수 없는 요소를 새 슬라이스에 복사하여 효율성을 높이는 것이 좋습니다.
<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>
4. 내부 복사 및 제로화
일반적인 목적의 내부 제거를 위해 두 개의 인덱스를 유지하고 제거된 요소 공간을 제로화하는 동안 제거할 수 없는 요소를 할당합니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!