ホームページ >バックエンド開発 >Golang >Golang ソート固有の実装

Golang ソート固有の実装

WBOY
WBOYオリジナル
2023-05-10 20:18:06756ブラウズ

Golang は非常に人気のあるプログラミング言語であり、その効率的な同時実行性とシンプルな構文により、バックエンドおよびネットワーク プログラミングに非常に適した言語となっています。 Golang では、sort パッケージは、並べ替えを実装するための非常に便利な方法を提供します。配列、スライス、文字列、その他の型を並べ替えることができます。また、非常に完全なカスタム 並べ替えメソッドも提供します。sort パッケージについては、以下で詳しく紹介します。そしてそれを実装します。

sort パッケージの組み込み関数

sort パッケージには 3 つの組み込みソート関数が用意されています。

  1. sort.Ints(a []int): int 型の場合スライスは昇順にソートされます。
  2. sort.Float64s(a []float64): float64 型のスライスを昇順にソートします。
  3. sort.Strings(a []string): 文字列型のスライスを昇順に並べ替えます。

これら 3 つの組み込み関数の使用方法は次のとおりです:

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 package custom sort

In組み込みに加えて ソート関数に加えて、sort パッケージはソート関数をカスタマイズする非常に便利な方法も提供します。 Golang では、sort.Interface インターフェイスを実装することで、カスタムの並べ替えメソッドを実装できます。 sort.Interface インターフェイスは、次の 3 つのメソッドを実装する必要があります:

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 インターフェイスを介してカスタム ソート メソッドを実装すると、3 つのメソッドを実装するだけで非常に便利です。カスタム並べ替えの場合、2 つの要素のサイズを比較することで、必要な並べ替え方法を実現できます。

sort パッケージ使用上の注意事項

sort パッケージを使用する場合、以下の点に注意する必要があります。 -in ソート パッケージおよびカスタム ソートが提供するソート関数はすべて昇順ですが、降順でソートする必要がある場合は、カスタム ソート関数が必要です。

    並べ替え関数をカスタマイズする場合、特に並べ替えに複数のフィールドが含まれる場合、2 つの要素のサイズを比較した結果が並べ替え方法を正しく反映できることを確認する必要があります。文字列を比較する場合は、文字列の長さの影響に注意し、長さが同じ場合にのみアルファベット順の比較を実行してください。
  1. sort はその場でソートされます。つまり、新しいスライスは作成されず、元のスライスが直接変更されます。元のデータを保持する必要があるかどうかを考慮する必要があります。

以上がGolang ソート固有の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。