Heim > Backend-Entwicklung > Golang > Wie überprüft man in Go das Vorhandensein von Elementen in Slices verschiedener Typen?

Wie überprüft man in Go das Vorhandensein von Elementen in Slices verschiedener Typen?

Linda Hamilton
Freigeben: 2024-11-02 03:11:30
Original
362 Leute haben es durchsucht

How do you check for element presence in slices of different types in Go?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage