언어 자료구조 알고리즘/구글 Go

[구글 Go 하자] 36. copy 함수를 사용하면 원소 값을 복사할 수 있어요.

언제나휴일 2016. 12. 17. 05:33
반응형

36. copy 함수를 사용하면 원소 값을 복사할 수 있어요.


 

 안녕하세요. 언제나 휴일, 언휴예요.

 

 슬라이스에서 대입 연산은 두 개의 변수가 같은 개체를 참조하는 것이었죠. 만약 배열의 대입 연산과 비슷하고 다른 배열의 원소 값을 복사하려면 copy 함수를 사용하세요. 주의할 점은 copy 함수로 복사하면 원소 값이 있던 곳은 복사합니다.

 

 예를 들어 슬라이스 s1은 용량이 10이고 원소 값이 1부터 10으로 초기 설정한 상태라고 가정해요. 그리고 s2는 용량이 5이고 원소 값은 89로 원소 개수가 2라고 가정 하죠. 이 때 copy(s2, s1) 호출하면 s2의 원소 개수 두 개(12)만 복사합니다. 당연히 용량이 부족하다고 늘려주지 않겠죠.

 

 다음은 용량이 10 s1과 용량이 5s2인 슬라이스 개체가 있을 때 copy(s2,s1)을 해 주는 예제 코드예요.

//copy 함수로 슬라이스 원소 복사

package main

 

import "fmt"

 

func main() {

    var s1 []int = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    var s2 []int = make([]int, 2, 5)

    s2[0] = 8

    s2[1] = 9

    fmt.Printf("s1 용량 %d 원소 개수:%d\n", cap(s1), len(s1))

    fmt.Println(s1)

    fmt.Printf("s2 용량 %d 원소 개수:%d\n", cap(s2), len(s2))

    fmt.Println(s2)

 

    copy(s2, s1)

 

    fmt.Println("===copy(s2,s1) 수행 ===")

    fmt.Printf("s1 용량 %d 원소 개수:%d\n", cap(s1), len(s1))

    fmt.Println(s1)

    fmt.Printf("s2 용량 %d 원소 개수:%d\n", cap(s2), len(s2))

    fmt.Println(s2)

 

}

 

 실행 결과는 다음과 같아요.

s1 용량 10 원소 개수:10

[1 2 3 4 5 6 7 8 9 10]

s2 용량 5 원소 개수:2

[8 9]

===copy(s2,s1) 수행 후===

s1 용량 10 원소 개수:10

[1 2 3 4 5 6 7 8 9 10]

s2 용량 5 원소 개수:2

[1 2]


관련 게시글

[구글 Go 하자] 31. 동적 배열, 슬라이스 기초

[구글 Go 하자] 32. 슬라이스에 append 함수로 순차 보관

[구글 Go 하자] 33. 슬라이스가 꽉 찰 때 append 함수를 사용하면 알아서 늘려줘요.

[구글 Go 하자] 34.슬라이스도 초기 값을 설정할 수 있어요.

[구글 Go 하자] 35. 배열의 대입 연산은 값 복사, 슬라이스는 참조

[구글 Go 하자] 37. 슬라이스[start:last]로 부분 슬라이스를 만들 수 있어요.

반응형