Heim >Backend-Entwicklung >Golang >Wie kann ich die Slice-Eindämmung in Go effizient prüfen?

Wie kann ich die Slice-Eindämmung in Go effizient prüfen?

DDD
DDDOriginal
2024-12-22 09:21:00464Durchsuche

How Can I Efficiently Check for Slice Containment in Go?

Slice-Containment-Check in Go

In Go kann effizient ermittelt werden, ob ein Element in einem Slice vorhanden ist, ohne jedes Element zu durchlaufen .

Triviale Methode

Wie Mostafa erwähnte, Um die Aufgabe zu vereinfachen, kann eine benutzerdefinierte Methode erstellt werden:

func SliceContains(slice []T, target T) bool {
    for _, item := range slice {
        if item == target {
            return true
        }
    }
    return false
}

Binäre Suche

Alternativ schlug mkb vor, die binäre Suche aus dem Sortierpaket zu verwenden. Dieser Ansatz erfordert ein vorsortiertes Segment und ist für große Datensätze effizient.

sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })
idx := sort.Search(len(slice), func(i int) bool { return slice[i] == target })
contains := idx != len(slice) && slice[idx] == target

Kartenoptimierung

Wenn häufige Einschlussprüfungen erforderlich sind, verwenden Sie stattdessen eine Karte Ein Slice bietet möglicherweise eine bessere Leistung.

type Set map[string]struct{}

func (s Set) Contains(key string) bool {
    _, ok := s[key]
    return ok
}

Die Verwendung eines leeren struct{}-Werts in der Karte reduziert den Speicheraufwand und optimiert die Karte Leistung. Set wird häufig für satzähnliche Operationen in Go verwendet.

Das obige ist der detaillierte Inhalt vonWie kann ich die Slice-Eindämmung in Go effizient prüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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