티스토리 뷰

 

 

| Go언어 정렬

Go언어에서는 기본적으로 정렬 메서드를 사용하려면 sortimport 하여 사용합니다.

 

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를 선언하겠다는 의미입니다.