[go] Sort 패키지의 다중 조건 정렬

Go 언어에서는 sort 패키지를 사용하여 다중 조건으로 정렬할 수 있습니다. sort 패키지는 정렬을 지원하기 위한 강력한 기능을 제공하고 있으며, 이를 활용하여 간단하게 다중 조건으로 정렬할 수 있습니다.

다중 조건 정렬의 필요성

일반적으로 정렬을 수행할 때 하나의 기준으로만 정렬하는 경우가 많지만, 때로는 여러 가지 기준에 따라 정렬해야 하는 경우가 있습니다. 예를 들어, 나이와 이름을 기준으로 정렬하거나, 가격과 인기도를 기준으로 정렬해야 하는 경우가 해당됩니다. 이러한 상황에서는 다중 조건으로 정렬하는 기능이 필요합니다.

Go에서의 다중 조건 정렬

다음은 Go 언어에서 sort 패키지를 사용하여 다중 조건으로 정렬하는 방법입니다.

package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Name string
	Age  int
}

type ByName []Person

func (a ByName) Len() int           { return len(a) }
func (a ByName) Less(i, j int) bool { return a[i].Name < a[j].Name }
func (a ByName) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

type ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

func main() {
	people := []Person{
		{"Alice", 25},
		{"Bob", 30},
		{"Eve", 20},
	}

	fmt.Println("Before sorting:", people)

	sort.Sort(ByName(people))
	fmt.Println("After sorting by name:", people)

	sort.Sort(ByAge(people))
	fmt.Println("After sorting by age:", people)
}

위 예제에서는 Person 구조체를 정의하고, ByNameByAge라는 사용자 정의 타입을 만들어 각각 이름과 나이에 따라 정렬할 수 있는 함수들을 구현합니다. 이후 sort.Sort를 사용하여 각각의 조건에 따라 정렬을 수행합니다.

위의 예제 코드를 실행하면, 이름과 나이에 따라 정렬된 결과를 확인할 수 있습니다.

다중 조건으로 정렬을 수행하는 방법에 대한 기본적인 이해를 바탕으로 Go 언어에서 더 복잡한 다중 조건 정렬을 수행할 수 있을 것입니다.