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
Barbara StreisandOriginal
2024-12-12 15:17:18510Durchsuche

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
}

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")
    }
}

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")
    }
}

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!

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