[Go] 슬라이스의 정렬(Slice Sort)

나는 중학교 시절, 마이컴이라는 컴퓨터 잡지에서 동일한 기능을 수행하는 코드를 Basic, Pascal, C, Fortran, Cobol이란 프로그래밍 언어를 통해 비교해서 보여주는 글을 본적이 있다. 수십년전의 기억이지만, 나는 그때 그 짧은 소스코드를 보고 느꼈던 설레임을 아직도 기억한다. (노래 가사가 맞구요;) Go라는 언어가 생생했던 그 설레임을 다시 생동감있게 되살려 준다.

Go에서 대표적인 자료 구조로써 배열과 매우 유사하지만, 그 길이를 동적으로 변경할 수 있다는 이점을 갖는 Slice라는 타입이 있다. 이 슬라이스를 통해 여러개의 데이터를 담아둘 수 있고, 담아둔 데이터들을 목적에 맞게 활용하는데.. 담아둔 여러개의 데이터를 어떤 기준에 맞게 정렬을 해야 할 때가 있다. 이때를 위한 예제 코드를 정리해 본다.

package main

import (
    "fmt"
    "sort"
)

type myDataType struct {
    name string
    age  int
}

func main() {
    mySlice := make([]myDataType, 0)
    mySlice = append(mySlice, myDataType{"김형준", 42})
    mySlice = append(mySlice, myDataType{"홍길동", 28})
    mySlice = append(mySlice, myDataType{"임꺽정", 38})

    fmt.Println(mySlice)

    sort.Slice(mySlice, func(i, j int) bool {
        return mySlice[i].age < mySlice[j].age
    })

    fmt.Println(mySlice)
}

결과는 아래와 같다.

C:/Go/bin/go.exe build [D:/__Working__/tstGo]
Success: process exited with code 0.
D:/__Working__/tstGo/tstGo.exe [D:/__Working__/tstGo]
[{김형준 42} {홍길동 28} {임꺽정 38}]
[{홍길동 28} {임꺽정 38} {김형준 42}]
Success: process exited with code 0.

복합 데이터의 묶음 타입인 구조체를 정의하고 구조체를 정의하는 필드값을 기준으로, 여기서는 나이를 의미하는 age를 통해 오름차순으로 정의하기 위해 익명함수를 사용했다. 코드는 짧지만 곰곰히 코드를 되짚어 볼만한 예제이다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다