Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari Slice dalam Gelung dalam Go?

Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari Slice dalam Gelung dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-10-31 06:21:02584semak imbas

How to Efficiently Remove Elements from a Slice in a Loop in Go?

Penyingkiran Elemen Di Tempat Dalam Gelung Slice

Masalah:

Mengakses elemen hirisan dari i dalam julat untuk gelung dan mengalih keluarnya menggunakan append() adalah bermasalah. Menaikkan pembolehubah gelung (i) boleh melangkau elemen berikutnya selepas dialih keluar, membawa kepada pemprosesan yang tidak lengkap.

Amalan Terbaik:

1. Penurunan Pembolehubah Gelung Manual

Gunakan gelung untuk biasa dengan pembolehubah gelung manual (i) berkurangan apabila elemen dialih keluar:

<code class="go">for i := 0; i < len(a); i++ {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
        i--
    }
}

2. Gelung Ke Bawah

Sebagai alternatif, gunakan gelung ke bawah untuk mengelakkan penyusutan manual:

<code class="go">for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>

3. Penyalinan Elemen Tidak Boleh Alih

Jika banyak elemen perlu dialih keluar, pertimbangkan untuk menyalin elemen tidak boleh tanggal ke kepingan baharu untuk meningkatkan kecekapan:

<code class="go">b := make([]string, len(a))
copied := 0
for _, s := range(a) {
    if !conditionMeets(s) {
        b[copied] = s
        copied++
    }
}
b = b[:copied]</code>

4. Penyalinan dan Pensifaran Di Tempat

Untuk penyingkiran di tempat tujuan umum, kekalkan dua indeks dan tetapkan elemen tidak boleh alih sambil menyifarkan ruang elemen yang dialih keluar:

<code class="go">copied := 0
for i := 0; i < len(a); i++ {
    if !conditionMeets(a[i]) {
        a[copied] = a[i]
        copied++
    }
}
for i := copied; i < len(a); i++ {
    a[i] = "" // Zero places of removed elements
}
a = a[:copied]</code>

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen dengan Cekap dari Slice dalam Gelung dalam Go?. 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