Go 언어는 높은 동시성 및 고성능 프로그래밍을 지원하는 오픈 소스 프로그래밍 언어입니다. 많은 회사에서 이 언어를 사용하고 지원하기 시작했습니다. 그 중에서도 Golang은 간결한 구문, 높은 코드 가독성, 빠른 실행 속도로 인해 많은 주목을 받았습니다.
Golang에서 range는 배열, 슬라이스, 스트링, 맵 등의 컬렉션 형태의 데이터를 처리하는데 사용될 수 있는 매우 중요한 키워드입니다. 우리는 일반적으로 이러한 컬렉션 유형의 데이터를 탐색하기 위해 range 키워드를 사용합니다. 그러나 range를 사용하는 동안 컬렉션의 요소를 수정해야 하는 경우 문제가 발생합니다. 루프 반복 중에 range를 사용하면 반복자가 유효하지 않게 되어 일련의 문제가 발생합니다. 이 기사에서는 Golang의 범위를 사용하여 요소를 삭제하는 방법을 자세히 소개합니다.
먼저 간단한 예를 살펴보세요.
package main import ( "fmt" ) func main() { nums := []int{1, 2, 3, 4, 5} for idx, val := range nums { if (idx == 2) { nums = append(nums[:idx], nums[idx+1:]...) } fmt.Println("val:", val) } fmt.Println("nums:", nums) }
실행 후 출력은 다음과 같습니다.
val: 1 val: 2 val: 4 val: 5 nums: [1 2 4 5]
range 키워드를 사용하고 슬라이스 크기를 수정하여 배열을 순회하는 과정에서 일부 요소가 실제로 통과되지 않았습니다. 이는 순회 프로세스 중에 nums[:idx] 표현식이 사용되어 실제로 nums의 길이가 변경되고 반복자가 슬라이스의 현재 길이를 성공적으로 가져오지 못하여 일부 문제가 발생하기 때문입니다.
이 문제를 해결하려면 두 개의 루프 변수를 사용하여 슬라이스를 반복할 수 있습니다. 첫 번째 변수는 슬라이스 요소를 반복하는 데 사용되고 두 번째 변수는 현재 반복 위치를 저장하는 데 사용됩니다. 그런 다음 루프 내부의 모든 요소를 처리하고 마지막으로 삭제해야 하는 모든 요소를 한 번에 삭제할 수 있습니다. 다음 예에서와 같이:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} var newNums []int var keepIdx []int for idx, val := range nums { if val%2 == 0 { keepIdx = append(keepIdx, idx) } newNums = append(newNums, val) } for i := len(keepIdx) - 1; i >= 0; i-- { newNums = append(newNums[:keepIdx[i]], newNums[keepIdx[i]+1:]...) } fmt.Println(newNums) // [1 3 5] }
이 예에서는 두 개의 새로운 변수 newNums 및 keepIdx를 생성하여 유지할 요소의 인덱스와 새 슬라이스를 저장합니다. 첫 번째 루프에서는 모든 요소를 새 슬라이스에 추가하고 유지해야 하는 요소의 인덱스를 keepIdx 배열에 추가합니다. 두 번째 루프에서는 제거해야 하는 요소를 제외한 모든 요소를 newNums 슬라이스에 추가합니다.
마지막으로 컬렉션 요소를 삭제하기 위해 범위를 사용할 때 반복 프로세스 중에 컬렉션 크기가 변경되지 않도록 특별한 주의가 필요합니다. 먼저 모든 요소를 순회하고 삭제해야 하는 요소의 첨자를 기록한 다음 해당 요소를 한 번에 삭제할 수 있습니다. 이렇게 하면 반복 프로세스로 인해 발생하는 인덱스 및 요소 불일치 문제가 방지됩니다.
요약하자면 Golang의 범위를 사용하여 요소를 삭제하는 방법은 두 가지에 불과합니다. 하나는 반복 과정에서 컬렉션 크기를 수정하지 않는 것이고, 다른 하나는 요소 수정에 특히 주의해야 한다는 것입니다. 반복자가 실패합니다. 이 두 가지 점을 능숙하게 사용할 수 있다면 범위를 사용하여 요소를 삭제하는 것이 쉬워질 것입니다.
위 내용은 Golang의 범위를 사용하여 요소를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 문자열 조작용 Go의 "문자열"패키지 사용에 대해 논의하고, 효율성을 높이고 유니 코드를 효과적으로 처리하기 위해 일반적인 기능 및 모범 사례를 자세히 설명합니다.

이 기사는 Cryptographic Operations를위한 Go의 "Crypto"패키지를 사용하여 보안 구현을위한 주요 생성, 관리 및 모범 사례를 논의하는 자세한 내용.

이 기사는 현재 시간 얻기, 특정 시간 만들기, 구문 분석 문자열 및 경과 시간 측정 등 GO의 "시간"패키지 사용에 대해 자세히 설명합니다.

기사는 가변 검사 및 수정을위한 GO의 "Reflect"패키지를 사용하여 방법 및 성능 고려 사항을 강조합니다.

이 기사에서는 동시 프로그래밍에서 원자 운영을위한 Go의 "Sync/Atomic"패키지 사용에 대해 논의하여 레이스 조건을 예방하고 성능 향상과 같은 이점을 자세히 설명합니다.

이 기사는 구문, 안전한 변환 관행, 일반적인 함정 및 학습 자원을 포함한 GO의 유형 변환에 대해 설명합니다. 명시 적 유형 변환 및 오류 처리를 강조합니다. [159 자]

이 기사는 구문, 공황 및 잘못된 유형과 같은 잠재적 오류, 안전한 유형, 안전한 취급 방법 및 성능 영향에 중점을 둔 유형의 어설 션에 대해 설명합니다.

이 기사는 여러 채널 작업을 처리하기위한 GO에서 "Select"명령문의 사용, "스위치"문의 차이점 및 여러 채널 처리, 타임 아웃 구현, 비 -B와 같은 일반적인 사용 사례를 설명합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
