구조체 슬라이스 정렬
728x90
구조체 슬라이스를 나이순으로 정렬하는 예제입니다.
package main
import (
"fmt"
"sort"
)
type Student struct {
Name string
Age int
}
// ❶ []Student의 별칭 타입 Students
type Students []Student
func (s Students) Len() int { return len(s) }
func (s Students) Less(i, j int) bool { return s[i].Age < s[j].Age } // ❷ 나이 비교
func (s Students) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
s := []Student{
{"화랑", 31}, {"백두산", 52}, {"류", 42},
{"켄", 38}, {"송하나", 18}}
sort.Sort(Students(s)) // ❸ 정렬
fmt.Println(s)
}
Students(s)는 [] Student 타입인 s를 정렬 인터페이스를 포함한 타입인 Students를 타입으로 변환하는 구문입니다.
[]Student[] Student 타입은 정렬에 필요한 Len(), Less(), Swap() 메서드를 가지고 있지 않기 때문에 sort.Sort() 함수의 인수로 사용될 수 없습니다. 그래서 [] Student의 별칭 타입을 만들어서 정렬 인터페이스를 포함하도록 했습니다. 처음부터 Students 타입으로 만들지 않은 이유는 실제 코딩하다 보면 슬라이스 타입으로 만들어서 사용하다가 정렬이 필요한 경우에 별도 타입을 만들어서 변환하는 경우가 빈번하기 때문입니다. 또 이 방식이 sort.Intn() 함수가 내부에서 동작하는 방식이기도 합니다. 그 결과 Age 순으로 정렬됐습니다.
728x90
'Go' 카테고리의 다른 글
Go - 구조화된 로그 남기기 (0) | 2021.09.24 |
---|---|
Golang 으로 맛보는 TDD(테스트 주도 개발) (0) | 2021.09.15 |
Go lang 에서 Mysql 연동하기 (0) | 2021.09.10 |
Go - 스택 메모리와 힙메모리 (0) | 2021.09.05 |
번아웃 탈출을 위한 새로운 언어 Go 배워보기 (0) | 2021.09.05 |
댓글
이 글 공유하기
다른 글
-
Golang 으로 맛보는 TDD(테스트 주도 개발)
Golang 으로 맛보는 TDD(테스트 주도 개발)
2021.09.15 -
Go lang 에서 Mysql 연동하기
Go lang 에서 Mysql 연동하기
2021.09.10 -
Go - 스택 메모리와 힙메모리
Go - 스택 메모리와 힙메모리
2021.09.05 -
번아웃 탈출을 위한 새로운 언어 Go 배워보기
번아웃 탈출을 위한 새로운 언어 Go 배워보기
2021.09.05