Heim >Backend-Entwicklung >Golang >Wie kann das Vorhandensein von Elementen in Go-Slices effizient überprüft werden?
Elementpräsenz in Go-Slices prüfen
In Go enthält ein Slice nicht von Haus aus eine Methode wie „slice.contains(object) for“. Bestimmen des Vorhandenseins eines Elements. Stattdessen besteht eine gängige Lösung darin, jedes Element zu durchlaufen, um die Suche durchzuführen.
Alternative Ansätze:
Benutzerdefinierte Methode:
Das Erstellen einer benutzerdefinierten Methode „slice.contains()“ ist eine unkomplizierte Option, wie durch angegeben 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 }
Binäre Suche:
Wie von mkb vorgeschlagen, bietet die Verwendung des binären Suchalgorithmus des Sortierpakets einen effizienteren Ansatz für große Slices.
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") } }
Verwendung einer Karte:
Wenn zahlreich Da Existenzprüfungen erwartet werden, stellt die Verwendung einer Karte als Alternative zu einem Slice eine effizientere Lösung dar.
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") } }
In diesem Szenario wird eine Map[string]struct{} aufgrund ihrer Optimierung häufig für Mengen verwendet interner Kartentyp für solche Werte.
Das obige ist der detaillierte Inhalt vonWie kann das Vorhandensein von Elementen in Go-Slices effizient überprüft werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!