Heim >Backend-Entwicklung >Golang >Gos Memset-Äquivalent: Wie initialisiert man Arrays mit Werten ungleich Null effizient?

Gos Memset-Äquivalent: Wie initialisiert man Arrays mit Werten ungleich Null effizient?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 02:29:40829Durchsuche

Go's Memset Equivalent: How to Efficiently Initialize Arrays with Non-Zero Values?

Go Analog for Memset

Frage:

Go-Programmierer suchen nach einer effizienten Methode analog zu Cs Memset zum Initialisieren von Arrays mit Werten ungleich Null, wie es bei einfachen Schleifen der Fall sein kann langsam.

Antwort:

Während Go eine explizite Memset-Funktion fehlt, gibt es optimierte Ansätze, die seine Funktionalität emulieren.

Loop- Basierende Lösung:

Die einfachste Alternative ist eine Schleife, die das Array durchläuft und das zuweist gewünschter Wert für jedes Element:

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}

Kopierbasierte Lösung:

Die optimierte copy()-Funktion von Go kann genutzt werden, um Arrays schnell zu initialisieren. Durch manuelles Festlegen des ersten Elements und wiederholtes Kopieren des gefüllten Teils wird die Anzahl der Iterationen auf log(n) reduziert:

func memsetRepeat(a []int, v int) {
    if len(a) == 0 {
        return
    }
    a[0] = v
    for bp := 1; bp < len(a); bp *= 2 {
        copy(a[bp:], a[:bp])
    }
}

Leistungsvergleich:

Für Bei kleinen Arrays ist die schleifenbasierte Lösung geringfügig schneller. Mit zunehmender Array-Größe wird die kopierbasierte Lösung jedoch aufgrund der geringeren Anzahl an Iterationen deutlich schneller.

Benchmark-Ergebnisse:

Array Size Loop-Based Copy-Based
100 elements 1.15x slower
1,000 elements 2.5x slower
10,000 elements 2x slower
100,000 elements 1.5x slower

Das obige ist der detaillierte Inhalt vonGos Memset-Äquivalent: Wie initialisiert man Arrays mit Werten ungleich Null effizient?. 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