슬라이스 슬라이스
slice
slice
진정한 의미 의 동적 배열 이 아니 라 인용 유형 이다.slice
항상 한 밑바닥 array
을 가리 키 고 slice
의 성명 도 array
처럼 길이 가 필요 하지 않 을 수 있다.// array ,
var fslice []int
다음 에 우 리 는
slice
하 나 를 설명 하고 데 이 터 를 초기 화 할 수 있 습 니 다. 다음 과 같 습 니 다.slice := []byte {'a', 'b', 'c', 'd'}
slice
한 배열 이나 이미 존재 하 는 slice
에서 다시 성명 할 수 있다.slice
array[i:j]
를 통 해 얻 을 수 있 습 니 다. 그 중에서 i
은 배열 의 시작 위치 이 고 j
는 끝 위치 이지 만 포함 되 지 않 습 니 다 array[j]
. 그 길 이 는 j-i
입 니 다.// 10 byte
var ar = [10]byte {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
// byte slice
var a, b []byte
// a 3 , ,
a = ar[2:5]
// a : ar[2]、ar[3] ar[4]
// b ar slice
b = ar[3:5]
// b :ar[3] ar[4]
주의
slice
와 배열 이 성명 할 때의 차이 점: 배열 을 성명 할 때 괄호 안에 배열 의 길이 나 사용 ...
을 자동 으로 계산 하고 성명 slice
을 설명 할 때 괄호 안에 문자 가 없습니다.그들의 데이터 구 조 는 다음 과 같다.
그림 2.3 slice 와 array 의 대응 관계 도
slice 는 간단 한 조작 이 있 습 니 다.
slice
의 기본 시작 위 치 는 0 이 고 ar[:n]
등가 ar[0:n]
slice
의 두 번 째 서열 은 기본적으로 배열 의 길이 이 고 ar[n:]
등가 ar[n:len(ar)]
slice
이렇게 할 수 있다 ar[:]
. 기본 적 인 첫 번 째 서열 은 0 이 고 두 번 째 는 배열 의 길이 이 며 등가 ar[0:len(ar)]
아래 의 이 예 는
slice
에 관 한 더 많은 조작 을 보 여 주 었 다.//
var array = [10]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
// slice
var aSlice, bSlice []byte
//
aSlice = array[:3] // aSlice = array[0:3] aSlice : a,b,c
aSlice = array[5:] // aSlice = array[5:10] aSlice : f,g,h,i,j
aSlice = array[:] // aSlice = array[0:10] aSlice
// slice slice
aSlice = array[3:7] // aSlice : d,e,f,g,len=4,cap=7
bSlice = aSlice[1:3] // bSlice aSlice[1], aSlice[2] : e,f
bSlice = aSlice[:3] // bSlice aSlice[0], aSlice[1], aSlice[2] : d,e,f
bSlice = aSlice[0:5] // slice slice cap , bSlice :d,e,f,g,h
bSlice = aSlice[:] // bSlice aSlice : d,e,f,g
slice
은 인용 유형 이기 때문에 그 중의 요소 의 값 을 바 꿀 때 다른 모든 인용 은 이 값 을 바 꿉 니 다. 예 를 들 어 위의 aSlice
과 bSlice
, aSlice
중의 요소 의 값 을 바 꾸 면 bSlice
대응 하 는 값 도 바 뀝 니 다.개념 적 으로 볼 때
slice
는 하나의 구조 체 와 같 고 이 구조 체 는 세 가지 요 소 를 포함한다.slice
지정 한 시작 위치 slice
길이 slice
시작 위치 에서 배열 의 마지막 위치 까지 의 길이 Array_a := [10]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
Slice_a := Array_a[2:5]
그림 2.4 slice 대응 배열 의 정보
slice
에 몇 가지 유용 한 내장 함수 가 있 습 니 다.len
가 져 오기 slice
길이 cap
가 져 오기 slice
의 최대 용량 append
slice
에 하나 이상 의 요 소 를 추가 한 후 slice
와 같은 유형의 slice
copy
함수 copy
는 원본 slice
의 src
에서 원 소 를 대상 dst
으로 복사 하고 복 제 된 원소 의 개수 주:
append
함 수 는 slice
인 용 된 그룹의 내용 을 바 꾸 어 같은 그룹의 다른 slice
을 인용 하 는 데 영향 을 줍 니 다.그러나 slice
에 남 은 공간 (즉 (cap-len) == 0
이 없 을 때 새로운 배열 공간 을 동적 으로 분배 합 니 다.되 돌아 오 는 slice
배열 지침 은 이 공간 을 가리 키 고 원래 배열 의 내용 은 변 하지 않 습 니 다.이 배열 을 인용 한 다른 slice
은 영향 을 받 지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.