사용자 지정 정렬 순서
비교 함수 정의하기
사용자 지정 정렬 순서은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
기본 순서 넘어서기
기본 정렬은 오름차순입니다. 하지만 실제 데이터에는 길이, 여러 필드 또는 계산된 값에 따른 사용자 지정 규칙이 필요합니다.
비교 함수에서 원하는 규칙을 표현할 수 있습니다.
비교 함수
sort.Slice에 사용하는 비교 함수의 형식은 func(i, j int) bool입니다. 요소 i가 요소 j보다 앞에 와야 할 때 true를 반환합니다.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{4, 1, 3}
less := func(i, j int) bool { return nums[i] < nums[j] }
sort.Slice(nums, less)
fmt.Println(nums)
}문자열 길이로 정렬하기
사전순 대신 각 문자열의 len()을 비교하여 길이순으로 정렬할 수 있습니다.
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"pear", "fig", "banana"}
sort.Slice(words, func(i, j int) bool {
return len(words[i]) < len(words[j])
})
fmt.Println(words)
}필드로 구조체 정렬하기
비교에 사용할 구조체 필드는 무엇이든 선택할 수 있습니다. 여기서는 가격을 기준으로 상품을 정렬합니다.
package main
import (
"fmt"
"sort"
)
type Product struct {
Name string
Price int
}
func main() {
items := []Product{{"Pen", 3}, {"Book", 12}, {"Cup", 7}}
sort.Slice(items, func(i, j int) bool {
return items[i].Price < items[j].Price
})
fmt.Println(items)
}여러 필드로 정렬하기
동률을 해소하려면 첫 번째 필드가 같을 때 두 번째 필드를 비교하십시오. 나이순으로 정렬한 다음 이름순으로 정렬합니다.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
p := []Person{{"Zoe", 30}, {"Ann", 30}, {"Bob", 25}}
sort.Slice(p, func(i, j int) bool {
if p[i].Age != p[j].Age {
return p[i].Age < p[j].Age
}
return p[i].Name < p[j].Name
})
fmt.Println(p)
}sort.Reverse로 순서 뒤집기
sort.Reverse는 sort.Interface를 감싸서 순서를 뒤집습니다. sort.IntSlice 같은 도우미와 함께 사용할 수 있습니다.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 4, 2, 3}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}sort.Interface
완전히 제어하려면 sort.Interface를 구현하십시오. 여기에는 Len(), Less(i, j int) bool, Swap(i, j int)의 세 메서드가 필요합니다.
package main
import (
"fmt"
"sort"
)
type ByLen []string
func (s ByLen) Len() int { return len(s) }
func (s ByLen) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
func (s ByLen) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
w := []string{"ccc", "a", "bb"}
sort.Sort(ByLen(w))
fmt.Println(w)
}계산된 값으로 정렬하기
비교에는 어떤 식이든 사용할 수 있습니다. 숫자를 0에서 떨어진 절댓값 순으로 정렬하십시오.
package main
import (
"fmt"
"sort"
)
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
nums := []int{-5, 2, -1, 3}
sort.Slice(nums, func(i, j int) bool {
return abs(nums[i]) < abs(nums[j])
})
fmt.Println(nums)
}대소문자를 구분하지 않고 정렬하기
문자열을 정렬할 때 대소문자를 무시하려면 비교 함수 내부에서 strings.ToLower를 사용하십시오.
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
w := []string{"banana", "Apple", "cherry"}
sort.Slice(w, func(i, j int) bool {
return strings.ToLower(w[i]) < strings.ToLower(w[j])
})
fmt.Println(w)
}슬라이스와 인터페이스 비교
순서를 사용자 지정하는 방법은 두 가지입니다:
sort.Slice- 빠르게 작성하는 인라인 비교 함수sort.Interface- 세 메서드를 갖춘 재사용 가능한 명명된 타입
한 번만 사용할 정렬에는 sort.Slice를 우선 사용하십시오.
비교 함수는 순수하게 유지하기
비교 함수는 요소를 읽고 불리언 값만 반환해야 합니다. 슬라이스를 수정하거나 부수 효과를 일으켜서는 안 됩니다. 그렇지 않으면 정렬이 예측할 수 없이 동작할 수 있습니다.
빠른 확인
사람을 나이순으로 정렬하고, 나이가 같으면 이름순으로 정렬하려면 어떤 기법을 사용합니까?
요약
원하는 정렬 순서를 정의할 수 있습니다:
- 비교 함수로 규칙을 표현합니다.
- 여러 필드를 사용하는 정렬에서는 동률일 때 두 번째 필드를 비교합니다.
sort.Reverse는 순서를 뒤집고,sort.Interface는 재사용 가능한 타입을 제공합니다.
자주 묻는 질문
“사용자 지정 정렬 순서” 강의는 무료인가요?
네 — “사용자 지정 정렬 순서” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“사용자 지정 정렬 순서”에서 뭘 배우나요?
비교 함수 정의하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“사용자 지정 정렬 순서” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 슬라이스 정렬하기
- 사용자 지정 정렬 순서
- 정렬된 데이터 검색하기
- 안정 정렬