Die Suche nach einem Element in einem Slice kann oft iterative Schleifen erfordern. Es gibt jedoch alternative Methoden, um diesen Prozess zu optimieren.
Obwohl Go keine integrierte Methode „slice.contains()“ bereitstellt, ist das Erstellen einer solchen relativ einfach. Sie könnten eine Funktion wie diese definieren:
func Contains[T comparable](s []T, v T) bool { for _, item := range s { if item == v { return true } } return false }
Für größere Slices sollten Sie die Verwendung des binären Suchalgorithmus aus dem Sortierpaket in Betracht ziehen. Es überprüft das mittlere Element und schränkt die Suche basierend auf dem Ergebnis rekursiv ein, was zu einer besseren Leistung für sortierte Slices führt:
func BinaryContains[T comparable](s []T, v T) bool { i := sort.Search(len(s), func(i int) bool { return s[i] >= v }) return i < len(s) && s[i] == v }
Wenn Sie häufig enthält-Prüfungen für Slices durchführen Erwägen Sie stattdessen die Verwendung einer Karte. Karten in Go bieten effiziente Schlüsselwertsuchen. Durch die Verwendung einer leeren Struktur{} als Werttyp können Sie eine Karte erstellen, die effektiv als Menge dient:
type Set[T comparable] map[T]struct{} func NewSet[T comparable]() *Set[T] { return new(Set[T]) } func (s *Set[T]) Add(v T) { (*s)[v] = struct{}{} } func (s *Set[T]) Contains(v T) bool { _, ok := (*s)[v] return ok }
Durch die Nutzung von Karten oder die Optimierung der Slice-Suche können Sie effizient prüfen, ob Elemente in Go vorhanden sind Scheiben.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient nach Elementen in Go-Slices suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!