Ce face slices.Max
slices.Max(x) și slices.Min(x) returnează cel mai mare, respectiv cel mai mic element dintr-un slice de numere sau texte. Pentru un slice gol, programul se oprește cu panic, deci verifică întâi len(x) > 0.
slices.MaxFunc(x, cmp) și slices.MinFunc(x, cmp) merg pe orice tip, de exemplu structuri: „elevul cu nota cea mai mare”. Dacă mai multe elemente sunt la egalitate, se returnează primul dintre ele.
Pentru două sau trei valori separate (nu un slice) folosește funcțiile predefinite max(a, b) și min(a, b).
Parametri
| Parametru | Descriere |
|---|---|
x |
Slice-ul, care nu trebuie să fie gol. |
cmp |
Pentru variantele Func: funcția de comparare. |
Ce returnează
Elementul maxim sau minim.
Exemple
Exemplul 1: Cea mai mare și cea mai mică temperatură
package main
import (
"fmt"
"slices"
)
func main() {
temperaturi := []float64{12.5, -3, 8.25, 21, 0}
fmt.Println("Maxim:", slices.Max(temperaturi))
fmt.Println("Minim:", slices.Min(temperaturi))
fmt.Println(slices.Min([]string{"Iași", "Arad", "Cluj"}))
}
Rezultat
Maxim: 21
Minim: -3
Arad
Exemplul 2: Elevul cu nota maximă
Ana și Ioana au amândouă 10; MaxFunc o returnează pe prima din listă.
package main
import (
"cmp"
"fmt"
"slices"
)
type Elev struct {
Nume string
Nota int
}
func main() {
elevi := []Elev{{"Mihai", 8}, {"Ana", 10}, {"Radu", 6}, {"Ioana", 10}}
dupaNota := func(a, b Elev) int { return cmp.Compare(a.Nota, b.Nota) }
fmt.Println("Cea mai mare notă:", slices.MaxFunc(elevi, dupaNota))
fmt.Println("Cea mai mică notă:", slices.MinFunc(elevi, dupaNota))
}
Rezultat
Cea mai mare notă: {Ana 10}
Cea mai mică notă: {Radu 6}
Greșeli frecvente
- Apelezi
slices.Maxpe un slice gol:panic: slices.Max: empty list.
Comenzi înrudite
math.Max: math.Max returnează cel mai mare, iar math.Min cel mai mic dintre două numere float64.slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).cmp.Compare: Compare returnează -1, 0 sau +1 după cum x este mai mic, egal sau mai mare decât y; Less spune dacă x < y.