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]
여기서slice2
는slice1
에서 인덱스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]
여기서slice2
는slice1
에서 인덱스2
의 요소를 제거한 후에 형성되지만 요소의 순서는 여기에서 유지되지 않습니다. 이전 방법보다 빠릅니다.
따라서 순서가 속도보다 우선 순위가 높은 경우 첫 번째 방법을 사용하고 속도가 순서보다 우선 순위가 높은 경우 두 번째 방법을 사용하여슬라이스
에서 요소를 삭제합니다.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn