slices.Contains în Go

Verifică dacă un slice conține o valoare (Contains) sau un element care îndeplinește o condiție (ContainsFunc).

Sintaxă
import "slices"

func Contains[S ~[]E, E comparable](s S, v E) bool
func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool

Ce face slices.Contains

slices.Contains(s, v) returnează true dacă valoarea v apare cel puțin o dată în s. Elementele trebuie să fie comparabile cu == (numere, texte, structuri simple).

slices.ContainsFunc(s, f) returnează true dacă există cel puțin un element pentru care f(element) este true: „există vreo notă sub 5?”, „există un produs fără stoc?”.

Ambele parcurg slice-ul de la început până găsesc (căutare liniară). Pentru multe verificări pe aceleași date, un map[T]bool sau un slice sortat cu BinarySearch este mai rapid.

Parametri

Parametru Descriere
s Slice-ul în care cauți.
v Valoarea căutată.
f Pentru ContainsFunc: condiția verificată pentru fiecare element.

Ce returnează

true dacă a găsit, altfel false.

Exemple

Exemplul 1: Este orașul în listă?

package main

import (
    "fmt"
    "slices"
)

func main() {
    livrare := []string{"Iași", "Suceava", "Bacău", "Vaslui"}
    for _, oras := range []string{"Bacău", "Cluj"} {
        if slices.Contains(livrare, oras) {
            fmt.Println(oras, ": livrăm")
        } else {
            fmt.Println(oras, ": nu livrăm")
        }
    }
}

Rezultat

Bacău : livrăm
Cluj : nu livrăm

Exemplul 2: Există vreo notă sub 5?

package main

import (
    "fmt"
    "slices"
)

func main() {
    ana := []int{9, 8, 10, 7}
    mihai := []int{6, 4, 8}
    subCinci := func(n int) bool { return n < 5 }
    fmt.Println("Ana are corigență:", slices.ContainsFunc(ana, subCinci))
    fmt.Println("Mihai are corigență:", slices.ContainsFunc(mihai, subCinci))
}

Rezultat

Ana are corigență: false
Mihai are corigență: true

Greșeli frecvente

  • Scrii propria buclă for doar ca să verifici dacă există o valoare: slices.Contains face asta într-un rând.
  • Cauți texte fără să ții cont de majuscule: Contains compară exact. Folosește ContainsFunc cu strings.EqualFold.

Comenzi înrudite

  • slices.Index: Returnează poziția primei apariții a unei valori (Index) sau a primului element care îndeplinește o condiție (IndexFunc), ori -1.
  • slices.BinarySearch: Caută rapid o valoare într-un slice sortat; returnează poziția (sau unde s-ar insera) și dacă a găsit-o.
  • maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.