Ordini di ordinamento personalizzati
Definire funzioni di confronto
Ordini di ordinamento personalizzati è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Oltre l'ordine predefinito
L'ordinamento predefinito è crescente. Tuttavia, i dati reali richiedono regole personalizzate: ordinare per lunghezza, per più campi o per un valore calcolato.
La funzione di confronto è il punto in cui si esprime qualsiasi regola desiderata.
La funzione less
Una funzione di confronto per sort.Slice ha la firma func(i, j int) bool. Restituisce true quando l'elemento i deve precedere l'elemento j.
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)
}Ordinare per lunghezza delle stringhe
Invece dell'ordine alfabetico, confronti il risultato di len() per ogni stringa, così da ordinarle per lunghezza.
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)
}Ordinare le struct per campo
Scelga un campo qualsiasi della struct per il confronto. Qui le struct dei prodotti vengono ordinate per prezzo.
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)
}Ordinamento per più campi
Per risolvere i pari merito, confronti un secondo campo quando il primo è uguale. Ordini prima per età e poi per nome.
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)
}Invertire con sort.Reverse
sort.Reverse avvolge un'implementazione di sort.Interface per invertirne l'ordine. Si abbina a helper come sort.IntSlice.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 4, 2, 3}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}L'interfaccia sort.Interface
Per avere il pieno controllo, implementi sort.Interface: tre metodi, Len(), Less(i, j int) bool e 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)
}Ordinare per valore calcolato
Il confronto può utilizzare qualsiasi espressione. Ordini i numeri in base alla loro distanza assoluta da zero.
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)
}Ordinamento senza distinzione tra maiuscole e minuscole
Utilizzi strings.ToLower all'interno del confronto per ignorare la distinzione tra maiuscole e minuscole quando ordina le stringhe.
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 o interfaccia
Esistono due modi per personalizzare l'ordine:
sort.Slice- funzione less rapida e inlinesort.Interface- tipo denominato riutilizzabile con tre metodi
Preferisca sort.Slice per gli ordinamenti occasionali.
Mantenere puri i confronti
Una funzione di confronto dovrebbe solo leggere gli elementi e restituire un bool. Non deve modificare la slice né avere effetti collaterali, altrimenti l'ordinamento potrebbe comportarsi in modo imprevedibile.
Verifica rapida
Vuole ordinare le persone per età e, a parità di età, per nome. Quale tecnica utilizza?
Riepilogo
Può definire qualsiasi ordine:
- La funzione less esprime la regola
- Gli ordinamenti per più campi confrontano un secondo campo in caso di parità
sort.Reverseinverte l'ordine;sort.Interfacefornisce tipi riutilizzabili
Impara Go con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 51
- Lezioni
- 203
Domande Frequenti
La lezione «Ordini di ordinamento personalizzati» è gratuita?
Sì — il testo completo di «Ordini di ordinamento personalizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Ordini di ordinamento personalizzati»?
Definire funzioni di confronto Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Ordini di ordinamento personalizzati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ordinare gli slice
- Ordini di ordinamento personalizzati
- Cercare dati ordinati
- Ordinamento stabile