>백엔드 개발 >Golang >Golang 정렬 특정 구현

Golang 정렬 특정 구현

WBOY
WBOY원래의
2023-05-10 20:18:06770검색

Golang은 효율적인 동시성과 간단한 구문으로 인해 매우 인기 있는 프로그래밍 언어로 백엔드 및 네트워크 프로그래밍에 매우 적합합니다. Golang에서 정렬 패키지는 배열, 슬라이스, 문자열 및 기타 유형을 정렬할 수 있는 매우 편리한 방법을 제공합니다. 또한 매우 완벽한 사용자 정의 정렬 방법을 제공합니다. 그리고 그것을 구현하십시오.

sort 패키지 내장 함수

sort 패키지는 세 가지 내장 정렬 기능을 제공합니다:

  1. sort.Ints(a []int): int 유형 슬라이스를 오름차순으로 정렬합니다.
  2. sort.Float64s(a []float64): float64 유형 슬라이스를 오름차순으로 정렬합니다.
  3. sort.Strings(a []string): 문자열 유형의 조각을 오름차순으로 정렬합니다.

다음은 세 가지 내장 기능을 사용하는 방법입니다.

package main

import (
    "fmt"
    "sort"
)

func main() {
    ints := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
    sort.Ints(ints)
    fmt.Println(ints)

    floats := []float64{3.1, 1.4, 4.1, 1.5, 5.9, 2.6, 5.3, 5.5, 3.5}
    sort.Float64s(floats)
    fmt.Println(floats)

    strings := []string{"golang", "is", "an", "awesome", "language"}
    sort.Strings(strings)
    fmt.Println(strings)
}

출력 결과:

[1 1 2 3 3 4 5 5 5 6 9]
[1.4 1.5 2.6 3.1 3.5 4.1 5.3 5.5 5.9]
[an awesome golang is language]

sort 패키지 사용자 정의 정렬

내장된 정렬 기능 외에도 sort 패키지는 매우 편리한 방법을 제공합니다. 정렬 기능을 사용자 정의합니다. Golang에서는 sort.Interface 인터페이스를 구현하여 사용자 정의 정렬 방법을 구현할 수 있습니다. sort.Interface 인터페이스는 다음 세 가지 메소드를 구현해야 합니다.

type Interface interface {
    // 返回数据集合的元素数量
    Len() int
    // 比较两个元素的大小,返回是否应该交换位置
    Less(i, j int) bool
    // 交换两个元素的位置
    Swap(i, j int)
}

sort.Interface 인터페이스를 통해 사용자 정의 정렬을 구현합니다. 다음은 문자열에서 문자 발생 횟수에 따라 정렬하는 예입니다.

package main

import (
    "fmt"
    "sort"
)

type StringArray []string

func (s StringArray) Len() int {
    return len(s)
}

// 自定义排序方式:按照字符串中字母出现次数升序排序
func (s StringArray) Less(i, j int) bool {
    return less(s[i], s[j])
}

// 交换两个元素的位置
func (s StringArray) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

// 判断字符串 a 是否小于字符串 b
func less(a, b string) bool {
    if len(a) < len(b) {
        return true
    } else if len(a) > len(b) {
        return false
    }

    for i := 0; i < len(a); i++ {
        if a[i] < b[i] {
            return true
        } else if a[i] > b[i] {
            return false
        }
    }

    return false
}

func main() {
    strings := StringArray{"banana", "apple", "pear", "pie"}
    sort.Sort(strings)
    fmt.Println(strings)
}

출력 결과 :

[pear pie apple banana]

위의 예에서 볼 수 있듯이 sort.Interface 인터페이스를 통해 사용자 정의 정렬 방법을 구현하는 것이 매우 편리합니다. 세 가지 방법만 구현하면 됩니다. 사용자 정의 정렬 시 두 요소의 크기를 비교하여 필요한 정렬 방법을 얻을 수 있습니다.

정렬 패키지 사용 시 주의 사항

정렬 패키지를 사용할 때 주의해야 할 사항은 다음과 같습니다.

  1. 정렬 패키지에서 제공하는 내장 정렬 기능과 사용자 정의 정렬은 모두 오름차순 정렬입니다. . 내림차순으로 정렬해야 하는 경우 사용자 정의 정렬 기능이 필요합니다.
  2. 정렬 기능을 사용자 정의할 때 두 요소의 크기를 비교한 결과가 정렬 방법을 올바르게 반영할 수 있는지 확인해야 합니다. 특히 여러 필드가 정렬에 관련된 경우 더욱 그렇습니다. 문자열을 비교할 때 문자열 길이의 영향에 주의하고 길이가 동일한 경우에만 알파벳순 비교를 수행합니다.
  3. 정렬은 제자리에 정렬됩니다. 즉, 새 조각이 생성되지 않으며 원본 조각이 직접 수정됩니다. 원본 데이터를 유지해야 하는지 여부를 고려해야 합니다.

위 내용은 Golang 정렬 특정 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.