본문 바로가기
golang

golang 정렬하기

by PudgeKim 2020. 10. 22.

golang으로 정렬하는 법을 찾다가 생각보다 복잡해서 정리할겸 포스팅을 쓰기로 했다.

테스트를 위한 간단한 string 배열이다.

자 이 배열을 정렬하기 위한 코드는?

이럴수가 엄청길다.. 파이썬은 .sort() 하나면 되는데..

뭐 어쨌든 분석해보기로 하자.

우선 정렬을 위해 sort 모듈을 import 해야한다.

그리고 문제의 부분인데 우선 이걸 이해하기 위해서는 golang의 interface 개념이 있어야 하기 때문에
혹시 모른다면 공부를 하고 오자.

sort.Sort()가 인자로 interface를 받기 때문에 Sort 함수에 데이터를 넣어주기 위해서는 interface를 구현해야 한다.

그렇기 때문에 인터페이스의 정의된 함수인 Len, Swap, Less 함수를 구현해야하고 이걸 구현하기 위해 새로운 
Test라는 type을 만들었다.

정리하면 여기까지 한 것은 Test라는 type을 만들었고 이 Test는 Sort 함수의 인자에 들어갈 수 있게 interface에 맞게 구현했다.

그럼 이제 test라는 배열을 정렬시켜야 하는데 말했다시피 Sort 함수의 인자에 들어가려면 interface에 맞게 구현해야 하는데 test 변수는 그 구현이 안되어있다.

그러나 우리는 Test type이라는걸 만들었고 이 type은 interface가 구현되어 있으므로 test 변수를 Test type으로 type conversion을 해주면 Sort 함수의 인자에 들어갈 수 있다.

적어놓고 보니까 Test type이랑 test 변수가 좀 햇갈릴 수 있을거 같은데 유의하기 바란다.

Test는 type이고 test는 string 배열이다.

 

사실 이것보다 더 간단하게 할 수 있는 방법이 있다.

이렇게 Slice함수를 이용하면 더 간단하게 가능하다.

Slice 함수의 경우 두번째 인자로 정해진 함수를 받으니까 저거에 맞는 함수를 써주어야 한다.

test[i] < test[j]면 오름차순 정렬이고

test[i] > test[j]면 내림차순 정렬이다.

 

Slice 함수가 더 간단하지만 Sort 함수도 interface 이해 등에 도움이 되므로 공부해두자

'golang' 카테고리의 다른 글

golang array와slice  (0) 2021.03.23
golang과 함께 알아보는 쿠키  (0) 2020.12.09
golang에서 HandlerFunc란?  (0) 2020.10.19
golang에서 slice VS linkedlist  (0) 2020.05.22
golang에서의 slicing  (0) 2020.05.18