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
Freigeben: 2024-12-25 20:03:11
Original
232 Leute haben es durchsucht

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

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

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

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!

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