Sortieren mit sort.Slice
Wenn die Go-Version neuer als 1.7 ist, können wir die Funktion sort.Slice
verwenden, um eine Map schnell nach Schlüssel oder Wert zu sortieren. sort.Slice
ermöglicht es Ihnen, eine benutzerdefinierte Vergleichsfunktion anzugeben.
Hier ist ein Beispiel:
package main
import (
"fmt"
"sort"
)
func main() {
m1 := map[int]int{
21: 99,
12: 98,
35: 17,
24: 36,
}
type kv struct {
Key int
Value int
}
var s1 []kv
for k, v := range m1 {
s1 = append(s1, kv{k, v})
}
sort.Slice(s1, func(i, j int) bool {
return s1[i].Key < s1[j].Key
})
fmt.Println("Sorted in ascending order by key:")
for _, pair := range s1 {
fmt.Printf("%d, %d\n", pair.Key, pair.Value)
}
}
Führen Sie das Programm aus:
go run ~/project/map.go
Die Ausgabe ist wie folgt:
Sorted in ascending order by key:
12, 98
21, 99
24, 36
35, 17
In diesem Programm haben wir eine Struktur kv
verwendet, um die Schlüssel-Wert-Paare aus der Map zu speichern. Anschließend haben wir das Slice der Strukturen mit der Funktion sort.Slice()
und einer anonymen Vergleichsfunktion sortiert. Diese Vergleichsfunktion (func(i, j int) bool
) bestimmt die Sortierreihenfolge basierend auf dem Key
-Feld unserer Struktur.
Wir können auch sort.Slice
verwenden, um die Map in absteigender Reihenfolge nach Schlüssel oder in aufsteigender Reihenfolge nach Wert zu sortieren, indem wir diese Vergleichsfunktion ändern. Dies bietet eine große Flexibilität bei der Sortierung unserer Map-Daten.