Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?

Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?

Barbara Streisand
Barbara Streisandasal
2024-12-31 05:00:12975semak imbas

How to Efficiently Initialize Arrays in Go: memset Alternatives?

Analog memset dalam Go

Dalam C , fungsi memset memulakan tatasusunan dengan nilai yang ditentukan dengan cekap. Go, bagaimanapun, tidak mempunyai sokongan memset langsung. Artikel ini meneroka beberapa pendekatan alternatif untuk mencapai kefungsian yang serupa.

Penyelesaian Gelung Berulang

Pelaksanaan mudah menggunakan gelung ialah:

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

Penyelesaian Berasaskan Salin

Pendekatan yang dioptimumkan memanfaatkan salinan yang cekap() fungsi:

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

Penyelesaian ini menyerupai pelaksanaan bait.Repeat(). Untuk mencipta []bait baharu yang diisi dengan nilai yang sama, bait.Repeat() disyorkan.

Perbandingan Penanda Aras

Tanda aras prestasi mendedahkan keunggulan memsetRepeat() berbanding memsetLoop() sebagai saiz tatasusunan meningkat:

Array Size memsetLoop memsetRepeat Improvement
100 ~1.15x slower ~1.15x faster
1,000 ~2.5x slower ~2.5x faster
10,000 ~2x slower ~2x faster
100,000 ~1.5x slower ~1.5x faster

Pada sekitar 3800-4000 elemen, memsetRepeat() menawarkan peningkatan prestasi ~3.2x yang ketara.

Kesimpulan

Walaupun memset tidak disokong secara asli dalam Go, memsetLoop() dan memsetRepeat() menyediakan alternatif yang cekap untuk memulakan tatasusunan dengan nilai bukan sifar. memsetRepeat(), menggunakan copy(), muncul sebagai penyelesaian optimum untuk tatasusunan yang lebih besar.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Tatasusunan dalam Go dengan Cekap: Memset Alternatif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:Redis Queue dan Cron in GoArtikel seterusnya:Redis Queue dan Cron in Go