루프 내 슬라이스에서 요소 제거
범위 루프를 사용하여 슬라이스를 반복하는 동안 슬라이스에서 요소를 제거하는 것은 불가능합니다. 슬라이스가 내부적으로 작동하는 방식. 그러나 이를 달성할 수 있는 다른 방법도 있습니다.
수동 루프 사용 및 인덱스 감소
한 가지 접근 방식은 len() 함수와 함께 수동 루프를 사용하는 것입니다. 슬라이스의 길이를 추적합니다. 요소가 제거되면 다음 요소를 건너뛰는 것을 방지하기 위해 인덱스를 감소시켜야 합니다. 예:
for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
하향 루프 사용
더 나은 대안은 하향 루프를 사용하여 수동 인덱스 조정이 필요하지 않도록 하는 것입니다.
for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }
제거할 수 없는 요소 복사
많은 요소를 제거해야 하는 시나리오의 경우 제거할 수 없는 요소를 새 슬라이스에 복사하는 것이 더 효율적일 수 있습니다.
b := make([]string, len(a)) copied := 0 for _, s := range(a) { if !conditionMeets(s) { b[copied] = s copied++ } } b = b[:copied]
내부 제거
내부 제거 기술은 두 개의 인덱스를 유지하고 동일한 슬라이스 내에서 제거할 수 없는 요소를 할당합니다.
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]
적절한 방법을 사용하면 제거로 인한 요소 이동과 관련된 오류가 발생하지 않고 루프 내 슬라이스에서 요소를 효과적으로 제거할 수 있습니다.
위 내용은 Go에서 반복하는 동안 슬라이스에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!