Vérification de la présence d'éléments dans les tranches Go
Dans Go, une tranche n'inclut pas nativement une méthode comme slice.contains(object) pour déterminer la présence d'un élément. Au lieu de cela, une solution courante consiste à parcourir chaque élément pour effectuer la recherche.
Approches alternatives :
Méthode personnalisée :
Créer une méthode slice.contains() personnalisée est une option simple, comme indiqué par Mostafa.
package main import "fmt" func main() { slice := []int{1, 2, 3} if sliceContains(slice, 2) { fmt.Println("Contains") } else { fmt.Println("Not contains") } } func sliceContains(slice []int, object int) bool { for _, v := range slice { if v == object { return true } } return false }
Recherche binaire :
Comme suggéré par mkb, l'utilisation de l'algorithme de recherche binaire du package de tri offre une approche plus efficace pour les grandes tranches.
package main import ( "fmt" "sort" ) func main() { slice := []int{1, 2, 3} sort.Ints(slice) index := sort.SearchInts(slice, 2) if index != len(slice) { fmt.Println("Contains") } else { fmt.Println("Not contains") } }
Utilisation d'une carte :
Si nombreux des contrôles d'existence sont prévus, l'utilisation d'une carte comme alternative à une tranche fournit une solution plus efficace.
package main import ( "fmt" "sync" ) func main() { slice := []int{1, 2, 3} m := make(map[int]struct{}, len(slice)) for _, v := range slice { m[v] = struct{}{} } if _, exists := m[2]; exists { fmt.Println("Contains") } else { fmt.Println("Not contains") } }
Dans ce scénario, une map[string]struct{} est fréquemment utilisée pour les ensembles en raison de son optimisation type de carte interne pour de telles valeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!