So prüfen Sie allgemein, ob in einem Slice Elemente in Go vorhanden sind
In Go kann festgestellt werden, ob ein Slice ein bestimmtes Element enthält häufiges Szenario. Es gibt jedoch keine integrierte Methode, um diese generische Prüfung über verschiedene Slice-Typen hinweg durchzuführen.
Fehlgeschlagener Versuch mit der Schnittstelle{}
Ein Versuch, die Schnittstelle zu verwenden{ } Typ als generische Lösung, wie unten gezeigt, mag plausibel erscheinen:
<code class="go">func sliceContains(slice []interface{}, elem interface{}) bool { for _, item := range slice { if item == elem { return true } } return false }</code>
Der Vergleich von Werten verschiedener Typen (Schnittstelle{}) kann jedoch zu falschen Ergebnissen führen.
Generische Lösung mit Reflexion
Um eine wirklich generische Lösung zu erreichen, kann Reflexion eingesetzt werden. Die folgende Funktion verwendet Reflektion, um über das Slice zu iterieren und jedes Element mit dem Zielelement zu vergleichen:
<code class="go">func Contains(slice, elem interface{}) bool { sv := reflect.ValueOf(slice) // Check that slice is actually a slice/array. if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array { return false } // Iterate the slice for i := 0; i < sv.Len(); i++ { // Compare elem to the current slice element if elem == sv.Index(i).Interface() { return true } } // Nothing found return false }</code>
Mit dieser Lösung können Sie generische Elementprüfungen für Slices jeglicher Art durchführen.
Überlegungen zur Leistung
Die generische Funktion „Contains“ bietet zwar die gewünschte Funktionalität, geht jedoch mit erheblichen Leistungseinbußen einher. Ein Benchmarking mit einer nicht generischen äquivalenten Funktion ergibt einen Verlangsamungsfaktor von etwa dem 50-fachen. Daher ist es wichtig, die Auswirkungen auf die Leistung zu bewerten, bevor Reflektion für generische Elementprüfungen verwendet wird.
Das obige ist der detaillierte Inhalt vonWie überprüft man in Go das Vorhandensein von Elementen in Slices verschiedener Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!