> 백엔드 개발 > Golang > golang 슬라이스 추가 및 삭제

golang 슬라이스 추가 및 삭제

WBOY
풀어 주다: 2023-05-22 16:19:07
원래의
752명이 탐색했습니다.

Golang 슬라이스는 매우 일반적으로 사용되는 데이터 구조이며 자동 확장을 지원하고 프로그램 내에서 데이터를 쉽게 조작하고 수정할 수 있는 동적 배열입니다. 슬라이스의 길이는 동적으로 변경될 수 있으며 이는 코드에 많은 유연성을 제공합니다. 슬라이스를 사용하는 동안 요소를 추가하고 삭제하는 것은 매우 일반적인 작업입니다. 이 기사에서는 golang 슬라이스에서 요소를 추가하고 삭제하는 방법을 소개합니다.

  1. golang 슬라이스의 기본 작업

먼저 요소 추가 및 삭제 프로세스를 더 잘 이해하기 위해 golang 슬라이스의 기본 작업을 검토해 보겠습니다. golang에서 슬라이스를 정의하려면 make 함수를 사용해야 합니다. 이 함수에는 세 개의 매개변수가 포함되어 있습니다. 첫 번째 매개변수는 슬라이스 유형을 지정하고, 두 번째 매개변수는 슬라이스 길이를 지정하며, 세 번째 매개변수는 용량을 지정합니다. 슬라이스.

예:

var s = make([]int, 3, 5)
로그인 후 복사

위 코드는 길이가 3이고 용량이 5인 int 유형 슬라이스를 정의합니다. 첫 번째 매개변수는 우리가 정의한 int 유형이고 두 번째 매개변수는 슬라이스의 길이를 지정합니다. 세 번째 매개변수는 슬라이스 용량을 5로 지정합니다. 슬라이스의 용량은 길이보다 클 수 있지만 길이는 용량보다 클 수 없다는 점에 유의해야 합니다.

다음은 golang 슬라이스의 몇 가지 기본 작업입니다.

1) 슬라이스 요소에 액세스

var s = []int {1, 2, 3, 4, 5}
fmt.Println(s[0])  // 输出1
로그인 후 복사

2) 슬라이스 요소 수정

var s = []int {1, 2, 3, 4, 5}
s[0] = 6
fmt.Println(s)  // 输出[6 2 3 4 5]
로그인 후 복사

3) 슬라이스의 길이와 용량 가져오기

var s = make([]int, 3, 5)
fmt.Println(len(s))  // 输出3
fmt.Println(cap(s))  // 输出5
로그인 후 복사

4) 슬라이스 작업

var s = []int {1, 2, 3, 4, 5}
fmt.Println(s[1:3])  // 输出[2 3]
로그인 후 복사
  1. golang 슬라이스 요소 추가 작업

golang에는 슬라이스 요소를 추가하는 두 가지 방법이 있습니다. 즉, 추가 기능과 "+" 연산자를 사용하는 것입니다.

이제 이 두 가지 방법의 사용법을 각각 소개하겠습니다.

1) 추가 기능을 사용하여 요소를 추가합니다

golang에서는 추가 기능을 사용하여 슬라이스 요소를 동적으로 추가할 수 있습니다. 구문은 다음과 같습니다:

func append(s []T, vs ...T) []T
로그인 후 복사

그 중 첫 번째 매개변수 s는 T 유형의 슬라이스이고 다음 매개변수 vs는 추가할 요소를 나타내는 역시 T 유형의 가변 매개변수 목록입니다. 이 함수의 반환 값은 추가된 요소를 포함하는 새로운 조각입니다.

예:

var s = []int {1, 2, 3, 4, 5}
s = append(s, 6)
fmt.Println(s)  // 输出[1 2 3 4 5 6]
로그인 후 복사

위 코드에서는 추가 기능을 사용하여 요소 6을 슬라이스에 추가한 다음 결과를 다시 원래 슬라이스에 저장합니다.

슬라이스에 여러 요소를 추가하려면 추가 기능 뒤에 이러한 요소만 전달하면 됩니다. 예:

var s = []int {1, 2, 3, 4, 5}
s = append(s, 6, 7, 8)
fmt.Println(s)  // 输出[1 2 3 4 5 6 7 8]
로그인 후 복사

슬라이스의 용량이 부족하면 추가 기능이 자동으로 용량을 확장하므로 시간 복잡도는 O(1)입니다.

2) 요소를 추가하려면 "+" 연산자를 사용하세요

추가 기능을 사용하는 것 외에도 golang에서 "+" 연산자를 사용하여 두 조각을 병합할 수도 있습니다. 이 연산자의 피연산자는 모두 슬라이스이고, 결과도 새로운 슬라이스입니다.

예를 들어 아래와 같습니다:

var s1 = []int {1, 2, 3}
var s2 = []int {4, 5, 6}
s := s1 + s2
fmt.Println(s)  // 输出[1 2 3 4 5 6]
로그인 후 복사

이 예에서는 두 개의 슬라이스를 추가하고 새 슬라이스 s를 얻습니다. "+" 연산자의 시간 복잡도는 O(n)입니다. 왜냐하면 새 배열을 열고 두 조각의 요소를 새 배열에 복사해야 하기 때문입니다.

  1. golang 슬라이스의 요소 삭제 작업

golang 슬라이스의 요소를 삭제하려면 추가 기능을 사용하는 방법과 복사 기능을 사용하는 두 가지 방법이 있습니다.

1) 추가 기능을 사용하여 요소 삭제

추가 기능의 슬라이싱 작업을 사용하여 삭제할 요소와 그 뒤의 요소를 가로채고 다시 결합하는 기능을 사용할 수 있습니다. 구체적인 구현은 다음과 같습니다.

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

func main() {
    var s = []int {1, 2, 3, 4, 5}
    s = Remove(s, 2)
    fmt.Println(s)  // 输出[1 2 4 5]
}
로그인 후 복사

이 코드에서는 Remove 함수를 사용하여 슬라이스의 세 번째 요소를 삭제합니다. 먼저, 슬라이스0부터 idx-1까지의 요소와 슬라이스 idx+1부터 끝까지의 요소를 새로운 슬라이스로 결합합니다. 그런 다음 추가 기능을 사용하여 이 새 조각을 원래 조각에 다시 저장합니다. 추가 기능은 자동으로 용량을 확장하므로 새 슬라이스의 용량 부족을 걱정할 필요가 없습니다.

이 방법의 시간 복잡도는 O(n)입니다. 왜냐하면 n-1개의 요소를 새 슬라이스에 복사해야 하기 때문입니다.

2) 복사 기능을 사용하여 요소 삭제

추가 기능을 사용하는 것 외에도 복사 기능을 사용하여 golang 슬라이스의 요소를 삭제할 수도 있습니다. 복사 함수는 src 슬라이스의 요소를 dst 슬라이스에 복사하고 복사된 요소 수를 반환할 수 있습니다.

구체적인 구현은 다음과 같습니다.

func Remove(slice []int, idx int) []int {
    copy(slice[idx:], slice[idx+1:])
    return slice[:len(slice)-1]
}

func main() {
    var s = []int {1, 2, 3, 4, 5}
    s = Remove(s, 2)
    fmt.Println(s)  // 输出[1 2 4 5]
}
로그인 후 복사

이 코드에서는 Remove 함수를 사용하여 슬라이스의 세 번째 요소를 삭제합니다. 복사 기능을 사용하여 idx+1 이후의 모든 요소를 ​​idx 위치에 복사한 다음 원본 슬라이스의 길이를 1만큼 줄입니다.

이 방법의 시간 복잡도도 O(n)이라는 점에 유의해야 합니다. 왜냐하면 n-1개의 요소를 새 슬라이스에 복사해야 하기 때문입니다.

  1. 요약

이 글에서는 골랭 슬라이스에서 요소를 추가하고 삭제하는 작업을 주로 소개합니다. 추가 기능과 "+" 연산자를 사용하여 요소를 추가할 수 있고, 추가 기능과 복사 기능을 사용하여 요소를 삭제할 수 있습니다.

실제 프로그래밍에서는 구체적인 상황에 따라 다양한 방법을 선택하는 것이 좋습니다. 적은 수의 요소를 추가하거나 삭제하려면 추가 기능을 사용하는 것이 더 편리하고, 많은 수의 요소를 추가하거나 삭제하려면 "+" 연산자를 사용하는 것이 더 효율적입니다. 기능.

위 내용은 golang 슬라이스 추가 및 삭제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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