Go 언어에서는 copy()를 사용하여 하나의 배열 슬라이스를 다른 배열 슬라이스로 복사할 수 있습니다. 추가된 두 개의 배열 슬라이스가 동일한 크기가 아닌 경우 요소 수를 복사합니다. ; 구문은 "복사(데이터 소스 슬라이스, 복사 대상 슬라이스)"입니다. copy() 함수를 사용하여 슬라이스를 복사할 때 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전해집니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
Go 언어의 내장 함수인 copy()는 하나의 배열 슬라이스를 다른 배열 슬라이스로 복사할 수 있습니다. 추가된 두 개의 배열 슬라이스가 동일한 크기가 아닌 경우 더 작은 배열 슬라이스의 요소 수에 따라 복사됩니다.
Go 언어 copy(): 슬라이스 복사(슬라이스 복사)
Go 언어의 슬라이스 복사는 내장된 copy() 함수를 사용합니다. copy() 함수를 사용하여 슬라이스를 복사할 때 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전해집니다.
copy() 함수의 사용 형식은 다음과 같습니다.
copy( destSlice, srcSlice []T) int
srcSlice는 데이터 소스 슬라이스입니다.
destSlice는 복사 대상입니다(즉, srcSlice를 destSlice로 복사).
대상 슬라이스 공간이 할당되어 있고 운반하기에 충분해야 합니다. 복사된 요소 수, 소스와 대상의 유형이 일치해야 합니다
반환 값:
실제로 복사된 요소 수를 나타냅니다.
Explanation
슬라이스 src를 슬라이스 dst에 복사하고 성공적으로 복사된 요소의 수를 반환합니다. 슬라이스 src의 길이가 dst 슬라이스의 길이보다 길면 dst 슬라이스 길이 요소만 복사됩니다.
다음 코드는 copy() 함수를 사용하여 한 슬라이스를 다른 슬라이스로 복사하는 프로세스를 보여줍니다.
slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
루프를 통해 슬라이스 요소를 복사하는 것이 더 간단하지만 내장된 copy() 함수가 더 간단합니다. 사용하기 편리함, 복사 () 함수의 첫 번째 매개변수는 복사할 대상 슬라이스이고, 두 번째 매개변수는 소스 슬라이스입니다. 두 슬라이스는 동일한 기본 배열을 공유할 수 있으므로 겹쳐도 문제가 없습니다.
사례
1. 코드를 사용하여 슬라이스 요소의 슬라이스 요소에 대한 참조 및 복사 작업의 영향을 보여줍니다.
package main import "fmt" func main() { // 设置元素数量为1000 const elementCount = 1000 // 预分配足够多的元素切片 srcData := make([]int, elementCount) // 将切片赋值 for i := 0; i < elementCount; i++ { srcData[i] = i } // 引用切片数据 refData := srcData // 预分配足够多的元素切片 copyData := make([]int, elementCount) // 将数据复制到新的切片空间中 copy(copyData, srcData) // 修改原始数据的第一个元素 srcData[0] = 999 // 打印引用切片的第一个元素 fmt.Println(refData[0]) // 打印复制切片的第一个和最后一个元素 fmt.Println(copyData[0], copyData[elementCount-1]) // 复制原始数据从4到6(不包含) copy(copyData, srcData[4:6]) for i := 0; i < 5; i++ { fmt.Printf("%d ", copyData[i]) } }
코드 설명은 다음과 같습니다.
8행에서는 전체 요소 수를 1000으로 정의합니다.
라인 11, 1000개의 요소가 포함된 정수 슬라이스를 미리 할당합니다. 이 슬라이스는 원본 데이터로 사용됩니다.
라인 14-16, srcData를 0에서 999 사이의 정수 값으로 채웁니다.
라인 19, refData는 srcData를 참조하며 슬라이스는 등호 연산으로 인해 요소를 복사하지 않습니다.
라인 22, srcData와 동일한 크기(동일 크기) 및 동일한 유형의 copyData 슬라이스를 미리 할당합니다.
라인 24, copy() 함수를 사용하여 원본 데이터를 copyData 슬라이스 공간에 복사합니다.
라인 27, 원본 데이터의 첫 번째 요소를 999로 수정합니다.
라인 30에서 참조된 데이터의 첫 번째 요소가 변경됩니다.
33번째 줄은 복사된 데이터 중 첫 번째 데이터를 인쇄하는 것이므로 변경되지 않습니다.
36번째 줄, srcData의 로컬 데이터를 copyData에 복사합니다.
라인 38~40, 로컬 데이터를 복사한 후 copyData 요소를 인쇄합니다.
2. 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전합니다
package main import ( "fmt" ) func main() { //当源切片的长度大于目的切片长度时,复制不完整 var sliceSrc = []string{"PHPCN", "Python", "Golang"} var sliceDst = []string{"Hello", "HaiCoder"} copy(sliceDst, sliceSrc) fmt.Println("sliceDst =", sliceDst) }
[관련 권장 사항: Go 비디오 튜토리얼, 프로그래밍 교육]
위 내용은 Go 언어에서 copy()를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!