slices.IsSorted în Go

Verifică dacă un slice este sortat crescător; IsSortedFunc folosește o funcție de comparare proprie.

Sintaxă
import "slices"

func IsSorted[S ~[]E, E cmp.Ordered](x S) bool
func IsSortedFunc[S ~[]E, E any](x S, cmp func(a, b E) int) bool

Ce face slices.IsSorted

slices.IsSorted(x) returnează true dacă fiecare element este mai mic sau egal cu următorul. Un slice gol sau cu un element este considerat sortat.

slices.IsSortedFunc(x, cmp) folosește aceeași funcție de comparare ca SortFunc. O folosești ca să verifici ordinea înainte de o căutare binară sau într-un test, după o sortare.

Parametri

Parametru Descriere
x Slice-ul verificat.
cmp Pentru IsSortedFunc: funcția de comparare (negativ, 0, pozitiv).

Ce returnează

true dacă slice-ul este în ordine, altfel false.

Exemple

Exemplul 1: Verificarea ordinii

package main

import (
    "fmt"
    "slices"
)

func main() {
    fmt.Println(slices.IsSorted([]int{1, 3, 3, 7}))
    fmt.Println(slices.IsSorted([]int{1, 7, 3}))
    fmt.Println(slices.IsSorted([]string{"Arad", "Cluj", "Iași"}))
    fmt.Println(slices.IsSorted([]int{}))
}

Rezultat

true
false
true
true

Exemplul 2: Ordine descrescătoare după un câmp

package main

import (
    "cmp"
    "fmt"
    "slices"
)

type Scor struct {
    Nume   string
    Puncte int
}

func main() {
    clasament := []Scor{{"Ana", 95}, {"Mihai", 88}, {"Ioana", 90}}
    desc := func(a, b Scor) int { return cmp.Compare(b.Puncte, a.Puncte) }
    fmt.Println(slices.IsSortedFunc(clasament, desc))
    slices.SortFunc(clasament, desc)
    fmt.Println(slices.IsSortedFunc(clasament, desc), clasament)
}

Rezultat

false
true [{Ana 95} {Ioana 90} {Mihai 88}]

Greșeli frecvente

  • Verifici ordinea descrescătoare cu IsSorted: aceasta verifică doar ordinea crescătoare. Folosește IsSortedFunc cu comparația inversată.

Comenzi înrudite

  • slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).
  • slices.SortFunc: Sortează un slice după o funcție de comparare care returnează negativ, zero sau pozitiv; SortStableFunc păstrează ordinea celor egali.
  • sort.Ints: Sortează crescător, pe loc, un []int, []string sau []float64; IntsAreSorted verifică dacă un []int este deja sortat.