Heim > Backend-Entwicklung > Golang > Wie kann das Vorhandensein von Elementen in Go-Slices effizient überprüft werden?

Wie kann das Vorhandensein von Elementen in Go-Slices effizient überprüft werden?

Barbara Streisand
Freigeben: 2024-12-12 15:17:18
Original
513 Leute haben es durchsucht

How to Efficiently Check for Element Presence in Go Slices?

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

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

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

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!

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