Benutzerdefinierte Sortierreihenfolgen
Vergleichsfunktionen definieren
Benutzerdefinierte Sortierreihenfolgen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Über die Standardsortierung hinaus
Standardmäßig wird aufsteigend sortiert. In realen Daten benötigen Sie jedoch eigene Regeln: etwa nach Länge, nach mehreren Feldern oder nach einem berechneten Wert.
In der Vergleichsfunktion formulieren Sie jede gewünschte Regel.
Die less-Funktion
Eine Vergleichsfunktion für sort.Slice hat die Signatur func(i, j int) bool. Sie gibt true zurück, wenn Element i vor Element j stehen soll.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{4, 1, 3}
less := func(i, j int) bool { return nums[i] < nums[j] }
sort.Slice(nums, less)
fmt.Println(nums)
}Nach Stringlänge sortieren
Vergleichen Sie statt der alphabetischen Reihenfolge die Werte von len(), um nach der Länge zu sortieren.
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"pear", "fig", "banana"}
sort.Slice(words, func(i, j int) bool {
return len(words[i]) < len(words[j])
})
fmt.Println(words)
}Structs nach einem Feld sortieren
Wählen Sie ein beliebiges Struct-Feld für den Vergleich aus. Hier sortieren wir Produkte nach dem Preis.
package main
import (
"fmt"
"sort"
)
type Product struct {
Name string
Price int
}
func main() {
items := []Product{{"Pen", 3}, {"Book", 12}, {"Cup", 7}}
sort.Slice(items, func(i, j int) bool {
return items[i].Price < items[j].Price
})
fmt.Println(items)
}Nach mehreren Feldern sortieren
Um Gleichstände aufzulösen, vergleichen Sie ein zweites Feld, wenn das erste gleich ist. Sortieren Sie zuerst nach Alter und dann nach Namen.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
p := []Person{{"Zoe", 30}, {"Ann", 30}, {"Bob", 25}}
sort.Slice(p, func(i, j int) bool {
if p[i].Age != p[j].Age {
return p[i].Age < p[j].Age
}
return p[i].Name < p[j].Name
})
fmt.Println(p)
}Mit sort.Reverse umkehren
sort.Reverse umschließt ein sort.Interface und kehrt dessen Reihenfolge um. Es lässt sich mit Hilfsfunktionen wie sort.IntSlice kombinieren.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 4, 2, 3}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}Das sort.Interface
Für vollständige Kontrolle implementieren Sie sort.Interface: die drei Methoden Len(), Less(i, j int) bool und Swap(i, j int).
package main
import (
"fmt"
"sort"
)
type ByLen []string
func (s ByLen) Len() int { return len(s) }
func (s ByLen) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
func (s ByLen) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func main() {
w := []string{"ccc", "a", "bb"}
sort.Sort(ByLen(w))
fmt.Println(w)
}Nach einem berechneten Wert sortieren
Der Vergleich kann jeden beliebigen Ausdruck verwenden. Sortieren Sie Zahlen nach ihrem absoluten Abstand von null.
package main
import (
"fmt"
"sort"
)
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
nums := []int{-5, 2, -1, 3}
sort.Slice(nums, func(i, j int) bool {
return abs(nums[i]) < abs(nums[j])
})
fmt.Println(nums)
}Groß- und Kleinschreibung ignorieren
Verwenden Sie strings.ToLower innerhalb des Vergleichs, um die Groß- und Kleinschreibung beim Sortieren von Strings zu ignorieren.
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
w := []string{"banana", "Apple", "cherry"}
sort.Slice(w, func(i, j int) bool {
return strings.ToLower(w[i]) < strings.ToLower(w[j])
})
fmt.Println(w)
}Slice oder Interface
Es gibt zwei Möglichkeiten, die Reihenfolge anzupassen:
sort.Slice– schnelle, direkt angegebene less-Funktionsort.Interface– wiederverwendbarer benannter Typ mit drei Methoden
Bevorzugen Sie sort.Slice für einmalige Sortiervorgänge.
Vergleiche frei von Seiteneffekten halten
Eine Vergleichsfunktion sollte nur Elemente lesen und einen booleschen Wert zurückgeben. Sie darf das Slice nicht verändern und keine Seiteneffekte haben, da sich die Sortierung sonst unvorhersehbar verhalten kann.
Kurzer Test
Sie möchten Personen nach Alter und bei gleichem Alter nach Namen sortieren. Welche Technik verwenden Sie?
Zusammenfassung
Sie können jede beliebige Sortierreihenfolge definieren:
- Die less-Funktion formuliert Ihre Regel
- Bei Sortierungen nach mehreren Feldern wird bei Gleichständen ein zweites Feld verglichen
sort.Reversekehrt die Reihenfolge um;sort.Interfaceermöglicht wiederverwendbare Typen
Häufig gestellte Fragen
Ist die Lektion „Benutzerdefinierte Sortierreihenfolgen“ kostenlos?
Ja — der vollständige Text von „Benutzerdefinierte Sortierreihenfolgen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzerdefinierte Sortierreihenfolgen“?
Vergleichsfunktionen definieren Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Benutzerdefinierte Sortierreihenfolgen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Slices sortieren
- Benutzerdefinierte Sortierreihenfolgen
- Sortierte Daten durchsuchen
- Stabiles Sortieren