slices.Index în Go

Returnează poziția primei apariții a unei valori (Index) sau a primului element care îndeplinește o condiție (IndexFunc), ori -1.

Sintaxă
import "slices"

func Index[S ~[]E, E comparable](s S, v E) int
func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int

Ce face slices.Index

slices.Index(s, v) returnează indicele primului element egal cu v. Dacă nu există, returnează -1.

slices.IndexFunc(s, f) returnează indicele primului element pentru care f returnează true, sau -1. Este util când cauți într-un slice de structuri: „primul elev din Iași”.

Verifică întotdeauna rezultatul înainte să-l folosești ca indice: s[-1] oprește programul cu panic.

Parametri

Parametru Descriere
s Slice-ul în care cauți.
v Valoarea căutată.
f Pentru IndexFunc: condiția.

Ce returnează

Indicele primei potriviri sau -1.

Exemple

Exemplul 1: Poziția unei valori

package main

import (
    "fmt"
    "slices"
)

func main() {
    zile := []string{"luni", "marți", "miercuri", "joi", "vineri"}
    fmt.Println(slices.Index(zile, "joi"))
    fmt.Println(slices.Index(zile, "duminică"))
}

Rezultat

3
-1

Exemplul 2: Primul elev dintr-un oraș

package main

import (
    "fmt"
    "slices"
)

type Elev struct {
    Nume, Oras string
}

func main() {
    elevi := []Elev{{"Ana", "Cluj"}, {"Mihai", "Iași"}, {"Ioana", "Iași"}}
    i := slices.IndexFunc(elevi, func(e Elev) bool { return e.Oras == "Iași" })
    if i >= 0 {
        fmt.Println("Primul din Iași:", elevi[i].Nume, "la poziția", i)
    }
    j := slices.IndexFunc(elevi, func(e Elev) bool { return e.Oras == "Arad" })
    fmt.Println("Din Arad:", j)
}

Rezultat

Primul din Iași: Mihai la poziția 1
Din Arad: -1

Greșeli frecvente

  • Folosești rezultatul direct ca indice (s[slices.Index(s, v)]) fără să verifici -1: programul se oprește cu index out of range [-1].

Comenzi înrudite

  • slices.Contains: Verifică dacă un slice conține o valoare (Contains) sau un element care îndeplinește o condiție (ContainsFunc).
  • slices.BinarySearch: Caută rapid o valoare într-un slice sortat; returnează poziția (sau unde s-ar insera) și dacă a găsit-o.
  • slices.Delete: Delete șterge elementele s[i:j]; DeleteFunc șterge toate elementele care îndeplinesc o condiție. Ambele returnează slice-ul nou.