0Pricing
Go Academy · Lektion

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-Funktion
  • sort.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.Reverse kehrt die Reihenfolge um; sort.Interface ermö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

  1. Slices sortieren
  2. Benutzerdefinierte Sortierreihenfolgen
  3. Sortierte Daten durchsuchen
  4. Stabiles Sortieren
← Zurück zu Go Academy