- [golang]고언어 정렬(sort)과 복사(copy) 목차
| Go언어 정렬
Go언어에서는 기본적으로 정렬 메서드를 사용하려면 sort 를 import 하여 사용합니다.
Int 정렬
sort.IntsAreSorted(slice2) : (int) 정렬 확인 return : boolean
sort.Ints : int형 배열 정렬
package main
import (
"fmt"
"sort"
)
func main() {
sliceInt := []int{1, 2, 5, 4, 6, 3}
//int형 정렬 (오름차순)
fmt.Println(sort.IntsAreSorted(sliceInt))
sort.Ints(sliceInt)
fmt.Println((sliceInt))
//string형 정렬 (오름차순)
}
결과
String 정렬
sort.StringAreSorted(stringSlice)
sort.Strings(stringSlice)
package main
import (
"fmt"
"sort"
)
func main() {
//string형 정렬 (오름차순)
sliceString := []string{"a", "c", "b", "f"}
fmt.Println(sort.StringsAreSorted(sliceString))
sort.Strings(sliceString)
fmt.Println(sliceString)
}
결과
| copy(복사)
- 꼭 !! " make " 로 공간을 할당 후 복사 해야한다.
(이 부분을 주의하셔야 합니다 !)
- 복사 된 slice 값을 변경해도 원본에는 영향이 없다.
문법
copy(복사 대상, 원본)
package main
func main() {
sliceArr := []int{1,2,3,4,5,6,7,8,9}
//5짜리 길이 arr2 선언
sliceArr2 := make([]int,5)
sliceArr3 := []int{}
//복사 copy메서드 활용
copy(sliceArr2,sliceArr)
//복사 불가능
//-> make로 선언하지 않는 변수를 제외한 나머지 변수에게는 복사가 불가능하다
copy(sliceArr3,sliceArr)
}
결과
func main(){
//원본을 분기하여 data 수정하기
testSliceArr := []int{1, 2, 3, 4, 5}
testSliceArr2 := make([]int, 5)
copy(testSliceArr2, testSliceArr)
testSliceArr2[0] = 4
testSliceArr2[4] = 7
fmt.Println(testSliceArr)
fmt.Println(testSliceArr2)
}
결과
이렇게 원본 배열은 수정하지 않고, 복사된 배열을 수정한 결과가 출력이 됩니다.
하지만 !!!
역시 주의해야할 점이 있습니다.
//주의
c := []int{1, 2, 3, 4, 5}
//참조 타입으로 추출해냄
d := c[0:3]
d[1] = 7
fmt.Println(c)
fmt.Println(d)
위 코드에서 문제점이 뭘까요 ??
바로
d := c[0:3]
이렇게 선언한 부분입니다.
이게 왜 문제가 되냐구요 ? 결과값을 봅시다.
위와 같이 원본이 수정된것을 볼 수 있습니다.
이렇게 코딩하시면 절대 안되므로 유의하시고 사용하셔야합니다 !!!
* 참고로 [0:3:5] 이런식으로 선언 된 경우, 세 번째 인사는 용량을 의미합니다.
즉, 0번째부터 3번째까지 용량5를 선언하겠다는 의미입니다.
'golang' 카테고리의 다른 글
[golang]Go언어 포인터(pointer)란 (0) | 2021.07.05 |
---|---|
[golang]Go언어 Map에 대해 알아보자 (0) | 2021.07.05 |
[golang]슬라이스(slice)란? (0) | 2021.07.04 |
[golang]Golang 배열(Array) 다루기 (0) | 2021.07.04 |
[golang]Golang 문자열 연산과 결합 (0) | 2021.07.04 |