가장 빨리 만나는 Go 언어 Unit 54. 정렬 활용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

정렬 활용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

데이터를 처리하다보면 정렬을 자주 하게 됩니다. 이번에는 Go 언어에서는 다양한 데이터를 정렬 할 수 있도록 패키지를 제공해줍니다.

다음은 sort 패키지에서 제공하는 정렬 함수와 타입입니다.

  • func Sort(data Interface): 데이터를 오름차순으로 정렬
  • func Reverse(data Interface) Interface: 데이터를 내림차순으로 정렬
  • type IntSlice []int: int 정렬 인터페이스
  • type Float64Slice []float64: float64 정렬 인터페이스
  • type StringSlice []string: string 정렬 인터페이스

먼저 정수, 실수, 문자열 슬라이스의 요소를 정렬해보겠습니다.

package main

import (
	"fmt"
	"sort"
)

func main() {
	a := []int{10, 5, 3, 7, 6}
	b := []float64{4.2, 7.6, 5.5, 1.3, 9.9}
	c := []string{"Maria", "Andrew", "John"}

	sort.Sort(sort.IntSlice(a))               // int 슬라이스를 오름차순으로 정렬
	fmt.Println(a)
	sort.Sort(sort.Reverse(sort.IntSlice(a))) // int 슬라이스를 내림차순으로 정렬
	fmt.Println(a)

	sort.Sort(sort.Float64Slice(b))               // float64 슬라이스를 오름차순으로 정렬
	fmt.Println(b)
	sort.Sort(sort.Reverse(sort.Float64Slice(b))) // float64 슬라이스를 내림차순으로 정렬
	fmt.Println(b)

	sort.Sort(sort.StringSlice(c))               // string 슬라이스를 오름차순으로 정렬
	fmt.Println(c)
	sort.Sort(sort.Reverse(sort.StringSlice(c))) // string 슬라이스를 내림차순으로 정렬
	fmt.Println(c)
}
실행
[3 5 6 7 10]
[10 7 6 5 3]
[1.3 4.2 5.5 7.6 9.9]
[9.9 7.6 5.5 4.2 1.3]
[Andrew John Maria]
[Maria John Andrew]

데이터가 담긴 슬라이스를 sort.Sort 함수에 넣으면 정렬이 됩니다. 기본적으로 오름차순 정렬이며 내림차순 정렬을 하려면 sort.Reverse 함수를 사용하면 됩니다.

여기서 sort.Sort 함수에 슬라이스를 넣을 때는 다음과 같이 자료형에 맞게 정렬 인터페이스를 사용합니다.

자료형정렬 인터페이스
intsort.IntSlice
float64sort.Float64Slice
stringsort.StringSlice

표 54-1 자료형별 정렬 인터페이스

정수, 실수, 문자열과 같은 기본 자료형은 다음과 같이 슬라이스를 바로 넣을 수 있는 함수를 제공합니다. 이 함수들은 기본적으로 오름차순 정렬을 합니다.

sort.Ints(a)
fmt.Println(a) // [3 5 6 7 10]

sort.Float64s(b)
fmt.Println(b) // [1.3 4.2 5.5 7.6 9.9]

sort.Strings(c)
fmt.Println(c) // [Andrew John Maria]

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01