Golang의 슬라이스에서 요소를 삭제하는 방법

Suraj Joshi 2023년1월30일
  1. 주어진 슬라이스에서 하위 슬라이스 만들기
  2. 이동중인 슬라이스에서 요소 삭제
Golang의 슬라이스에서 요소를 삭제하는 방법

Go에서slice는 배열을 기준으로 색인을 생성하지만 크기를 조정할 수 있으므로 크기가 고정되지 않은 가변 크기 배열입니다. slice의 모든 요소는 동적 특성으로 인해 ‘슬라이스’에서 삭제할 수 있습니다. ‘슬라이스’에서 요소를 삭제하는 것은 ‘슬라이스’에서 요소를 삭제하기 위해 Go에 내장 함수가 없기 때문에 다른 언어와는 상당히 다릅니다.

주어진 슬라이스에서 하위 슬라이스 만들기

‘슬라이스’에서 요소를 삭제하는 방법에 대해 자세히 알아보기 전에 ‘슬라이스’에서 요소를 삭제하는 주요 구성 요소 중 하나 인 지정된 ‘슬라이스’에서 ‘서브 슬라이스’를 만드는 방법을 살펴 보겠습니다.

package main

import "fmt"

func main() {
    var Slice1 = []int{1, 2, 3, 4}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := Slice1[:2]
    fmt.Printf("slice2: %v\n", Slice2)
}

출력:

slice1: [1 2 3 4]
slice2: [1 2]

여기서,slice2는 시작부터 인덱스0부터 인덱스2-1까지의 모든 요소, 즉1을 포함하는slice1로 형성된 서브 슬라이스입니다. Go에서 슬라이스 의 색인은0에서 시작한다는 점에 주목하십시오.

package main

import "fmt"

func main() {
    var Slice1 = []int{1, 2, 3, 4}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := Slice1[2:]
    fmt.Printf("slice2: %v\n", Slice2)
}

출력:

slice1: [1 2 3 4]
slice2: [3 4]

여기에서slice2는 인덱스2에서 슬라이스 끝까지의 모든 요소를 ​​포함하는slice1로 형성된 서브 슬라이스입니다.

이동중인 슬라이스에서 요소 삭제

‘슬라이스’에서 요소를 삭제하는 작업은 요구 사항에 따라 다른 접근 방식으로 수행 할 수 있습니다. ‘슬라이스’에서 요소를 삭제하는 다양한 방법은 아래에 설명되어 있습니다.

순서가 중요한 경우

요소를 제거한 후 슬라이스 순서를 유지하려면 삭제 된 요소의 오른쪽에있는 모든 요소의 위치를 ​​왼쪽으로 이동합니다.

package main

import "fmt"

func remove(slice []int, s int) []int {
    return append(slice[:s], slice[s+1:]...)
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

출력:

slice1: [1 2 3 4 5]
slice2: [1 2 4 5]

여기서slice2slice1에서 인덱스2의 요소를 제거한 후에 형성됩니다.

순서가 중요하지 않은 경우

package main

import "fmt"

func remove(s []int, i int) []int {
    s[i] = s[len(s)-1]
    return s[:len(s)-1]
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

출력:

slice1: [1 2 3 4 5]
slice2: [1 2 5 4]

여기서slice2slice1에서 인덱스2의 요소를 제거한 후에 형성되지만 요소의 순서는 여기에서 유지되지 않습니다. 이전 방법보다 빠릅니다.

따라서 순서가 속도보다 우선 순위가 높은 경우 첫 번째 방법을 사용하고 속도가 순서보다 우선 순위가 높은 경우 두 번째 방법을 사용하여슬라이스 에서 요소를 삭제합니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

관련 문장 - Go Slice