slices.Max în Go

Returnează cel mai mare (Max) sau cel mai mic (Min) element dintr-un slice; variantele Func folosesc o comparație proprie.

Sintaxă
import "slices"

func Max[S ~[]E, E cmp.Ordered](x S) E
func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E
func Min[S ~[]E, E cmp.Ordered](x S) E
func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E

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.Max pe 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.