Heim >Backend-Entwicklung >Golang >Wie kann ich Arrays in Go effizient initialisieren, ähnlich wie beim Memset von C?

Wie kann ich Arrays in Go effizient initialisieren, ähnlich wie beim Memset von C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 20:03:11246Durchsuche

How Can I Efficiently Initialize Arrays in Go, Similar to C  's memset?

Gibt es ein Äquivalent von Memset in Go?

In C ermöglicht die Memset-Funktion die effiziente Initialisierung von Arrays mit bestimmten Werten. In Go gibt es zwar kein direktes Äquivalent, aber mehrere Techniken können ähnliche Ergebnisse erzielen.

Schleifeniteration

Der einfachste Ansatz besteht darin, eine Schleife zu verwenden, um jedes Element festzulegen ein Array auf den gewünschten Wert.

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

Wiederholt copy()

Durch die Nutzung der hochoptimierten Funktion copy() können wir ein wiederholtes Kopiermuster nutzen, um Array-Werte effizient festzulegen.

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

Benchmark-Ergebnisse

Um die Leistung dieser Techniken zu bewerten, vergleichen wir sie für verschiedene Arrays miteinander Größen.

var a = make([]int, 1000) // Size will vary

func BenchmarkLoop(b *testing.B) {
    for i := 0; i < b.N; i++ {
        memsetLoop(a, 10)
    }
}

func BenchmarkRepeat(b *testing.B) {
    for i := 0; i < b.N; i++ {
        memsetRepeat(a, 11)
    }
}

Die Ergebnisse zeigen, dass memsetRepeat() memsetLoop() für größere Arrays übertrifft und seine Effizienz für eine schnelle Initialisierung demonstriert.

Das obige ist der detaillierte Inhalt vonWie kann ich Arrays in Go effizient initialisieren, ähnlich wie beim Memset von C?. 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