Golang ist eine statisch typisierte, objektorientierte Programmiersprache mit hoher Parallelität und eine der Sprachen, die in den letzten Jahren immer beliebter geworden sind. Obwohl es in Golang keinen Set-Typ gibt, können wir die Set-Funktion problemlos über grundlegende Datenstrukturen wie Slice und Map implementieren. In diesem Artikel wird erläutert, wie Sie Set mit Golang implementieren.
Set ist eine ungeordnete und sich nicht wiederholende Datenstruktur. Sie unterstützt grundlegende Operationen eines Sets, einschließlich des Hinzufügens von Elementen, des Löschens von Elementen, des Bestimmens, ob Elemente vorhanden sind usw. In einer Menge gibt es keine sequentielle Beziehung zwischen den Elementen und jedes Element ist einzigartig.
Slice in Golang kann die Funktion von Set implementieren, da die Elemente in Slice geordnet sind und jedes Element wiederholt erscheinen kann. Wir können den Deduplizierungsvorgang von Slice über benutzerdefinierte Methoden implementieren, um den Zweck von Set zu erreichen.
type SetSlice []interface{} func (s *SetSlice) Add(val interface{}) { for _, v := range *s { if val == v { return } } *s = append(*s, val) } func (s *SetSlice) Remove(val interface{}) { for i, v := range *s { if val == v { *s = append((*s)[:i], (*s)[i+1:]...) return } } } func (s *SetSlice) Contains(val interface{}) bool { for _, v := range *s { if val == v { return true } } return false }
Im obigen Code haben wir den SetSlice-Typ angepasst und die Methoden „Add“, „Remove“, „Contains“ und andere hinzugefügt. Wenn wir die Add-Methode aufrufen, prüfen wir zunächst, ob das gleiche Element vorhanden ist, indem wir das Slice durchlaufen, und kehren direkt zurück, wenn es existiert gelöscht und führt den Löschvorgang durch. Wenn wir feststellen, ob ein Element vorhanden ist, durchlaufen wir auch das Slice, um das Element zu finden.
Zusätzlich zu Slice kann Map in Golang auch die Set-Funktion implementieren, da jeder Schlüssel in der Map eindeutig sein muss. Wir können den Schlüssel der Karte als Wert des Elements verwenden und den Wert der Karte auf einen beliebigen Wert festlegen. Der spezifische Wert ist uns egal, wir müssen nur bestimmen, ob das Element in der Karte erscheint.
type SetMap map[interface{}]struct{} var exist = struct{}{} func (s SetMap) Add(val interface{}) { s[val] = exist } func (s SetMap) Remove(val interface{}) { delete(s, val) } func (s SetMap) Contains(val interface{}) bool { _, c := s[val] return c }
Im obigen Code haben wir den SetMap-Typ angepasst und die Methoden „Hinzufügen“, „Entfernen“, „Enthält“ und andere hinzugefügt. Beim Aufrufen der Add-Methode fügen wir das Element direkt als Schlüssel der Map in die Map ein, und der Wert ist ein leerer Typ struct{}. Beim Löschen des Elements löschen wir den entsprechenden Schlüssel direkt in der Map über die Löschfunktion ; Bei der Beurteilung, ob das Element vorhanden ist, ermitteln wir, ob das Element vorhanden ist, indem wir auf den entsprechenden Schlüssel in der Karte zugreifen.
Obwohl es in Golang keinen Set-Typ gibt, können wir die Set-Funktion über grundlegende Datenstrukturen wie Slice und Map implementieren. Die Verwendung von Slice zum Implementieren von Set erfordert eine manuelle Deduplizierung, was problematischer ist. Die Verwendung von Map zum Implementieren von Set ist einfacher und effizienter. Wenn wir komplexere Operationen für Set ausführen müssen, z. B. Schnittmenge und Vereinigung, wird natürlich empfohlen, eine Bibliothek eines Drittanbieters wie github.com/deckarep/golang-set zu verwenden, was die Effizienz erheblich verbessern kann.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Set in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!