> 백엔드 개발 > Golang > Golang의 범위를 사용하여 요소를 삭제하는 방법

Golang의 범위를 사용하여 요소를 삭제하는 방법

PHPz
풀어 주다: 2023-04-11 13:50:18
원래의
869명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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