Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memulakan Tatasusunan dalam Go dengan Cekap, Sama seperti memset C?

Bagaimanakah Saya Boleh Memulakan Tatasusunan dalam Go dengan Cekap, Sama seperti memset C?

Barbara Streisand
Lepaskan: 2024-12-25 20:03:11
asal
232 orang telah melayarinya

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

Adakah terdapat Setara dengan memset dalam Go?

Dalam C , fungsi memset membenarkan pemulaan tatasusunan yang cekap dengan nilai tertentu. Dalam Go, walaupun tiada persamaan langsung, beberapa teknik boleh mencapai hasil yang serupa.

Lelaran Gelung

Pendekatan paling mudah ialah menggunakan gelung untuk menetapkan setiap elemen tatasusunan kepada nilai yang dikehendaki.

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

Diulang copy()

Mengambil kesempatan daripada fungsi copy() yang sangat dioptimumkan, kami boleh memanfaatkan corak salinan berulang untuk menetapkan nilai tatasusunan dengan cekap.

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])
    }
}
Salin selepas log masuk

Hasil Penanda Aras

Untuk menilai prestasi teknik ini, kami menanda arasnya antara satu sama lain untuk tatasusunan yang berbeza saiz.

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)
    }
}
Salin selepas log masuk

Hasilnya menunjukkan bahawa memsetRepeat() mengatasi prestasi memsetLoop() untuk tatasusunan yang lebih besar, menunjukkan kecekapannya untuk pemulaan pantas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Tatasusunan dalam Go dengan Cekap, Sama seperti memset C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan