Heim >Backend-Entwicklung >Golang >Golang sortenspezifische Implementierung

Golang sortenspezifische Implementierung

WBOY
WBOYOriginal
2023-05-10 20:18:06756Durchsuche

Golang ist eine sehr beliebte Programmiersprache. Aufgrund seiner effizienten Parallelität und einfachen Syntax ist es eine sehr geeignete Sprache für die Backend- und Netzwerkprogrammierung. In Golang bietet das Sortierpaket eine sehr praktische Möglichkeit zum Sortieren von Arrays, Slices, Zeichenfolgen und anderen Typen. Die Verwendung des Sortierpakets wird im Folgenden ausführlich vorgestellt und umsetzen.

integrierte Funktionen des Sortierpakets

sort-Paket bietet drei integrierte Sortierfunktionen:

  1. sort.Ints(a []int): Int-Typ-Slices in aufsteigender Reihenfolge sortieren.
  2. sort.Float64s(a []float64): Slices vom Typ float64 in aufsteigender Reihenfolge sortieren.
  3. sort.Strings(a []string): Slices vom String-Typ in aufsteigender Reihenfolge sortieren.

Im Folgenden erfahren Sie, wie Sie diese drei integrierten Funktionen verwenden:

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)
}

Ausgabeergebnisse:

[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]

Benutzerdefinierte Sortierung des Sortierpakets

Zusätzlich zu den integrierten Sortierfunktionen bietet das Sortierpaket auch eine sehr praktische Möglichkeit um die Sortierfunktion anzupassen. In Golang können wir benutzerdefinierte Sortiermethoden implementieren, indem wir die Schnittstelle sort.Interface implementieren. Die Schnittstelle sort.Interface muss die folgenden drei Methoden implementieren:

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

Wir implementieren die benutzerdefinierte Sortierung über die Schnittstelle sort.Interface. Hier ist ein Beispiel für die Sortierung nach der Anzahl des Vorkommens von Buchstaben in einer Zeichenfolge:

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)
}

Ergebnis ausgeben :

[pear pie apple banana]

Wie aus dem obigen Beispiel ersichtlich ist, ist es sehr praktisch, eine benutzerdefinierte Sortiermethode über die Schnittstelle sort.Interface zu implementieren. Sie müssen nur drei Methoden implementieren. Bei der benutzerdefinierten Sortierung können wir die von uns benötigte Sortiermethode erreichen, indem wir die Größe zweier Elemente vergleichen.

Hinweise zur Verwendung des Sortierpakets

Bei der Verwendung des Sortierpakets müssen Sie einige Dinge beachten:

  1. Die integrierten Sortierfunktionen und die vom Sortierpaket bereitgestellte benutzerdefinierte Sortierung sind beide aufsteigende Sortierung Wenn Sie in absteigender Reihenfolge sortieren müssen, ist eine benutzerdefinierte Sortierfunktion erforderlich.
  2. Beim Anpassen der Sortierfunktion sollten Sie sicherstellen, dass das Ergebnis des Vergleichs der Größen zweier Elemente die Sortiermethode korrekt widerspiegeln kann, insbesondere wenn mehrere Felder an der Sortierung beteiligt sind. Achten Sie beim Vergleichen von Zeichenfolgen auf die Auswirkung der Zeichenfolgenlänge und führen Sie einen alphabetischen Vergleich nur durch, wenn die Längen gleich sind.
  3. sort ist vor Ort sortiert, das heißt, es werden keine neuen Slices erstellt und die ursprünglichen Slices werden direkt geändert. Sie sollten überlegen, ob die Originaldaten beibehalten werden müssen.

Das obige ist der detaillierte Inhalt vonGolang sortenspezifische Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn