0Pricing
Go Academy · 강의

사용자 지정 정렬 순서

비교 함수 정의하기

사용자 지정 정렬 순서은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 슬라이스 정렬하기
  2. 사용자 지정 정렬 순서
  3. 정렬된 데이터 검색하기
  4. 안정 정렬
← Go Academy(으)로 돌아가기