Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mengalih Keluar Elemen daripada Slice Dalam Gelung dalam Go: Apakah Amalan Terbaik?

Cara Mengalih Keluar Elemen daripada Slice Dalam Gelung dalam Go: Apakah Amalan Terbaik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 05:01:30190semak imbas

How to Remove Elements from a Slice Within a Loop in Go: What Are the Best Practices?

Mengalih keluar Elemen Slice Dalam Gelung

Mengalih keluar elemen secara berkesan daripada kepingan dalam gelung boleh menjadi rumit. Pendekatan yang salah tetapi biasa ialah menggunakan tambah dalam gelung berasaskan julat:

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

Walau bagaimanapun, pendekatan ini akan mengakibatkan pembolehubah gelung tidak disegerakkan dan melangkau elemen.

Penyingkiran Berasaskan Gelung yang Betul

Sebaliknya, pertimbangkan untuk mengurangkan pembolehubah gelung secara manual selepas mengalih keluar elemen:

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

Gelung Ke Bawah untuk Penyingkiran Berbilang

Jika berbilang elemen mungkin perlu dialih keluar, gelung ke bawah memastikan elemen yang dialihkan kekal di luar lelaran gelung:

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

Ganti untuk Banyak Pengalihan

Untuk penyingkiran yang meluas, pertimbangkan untuk menyalin elemen tidak boleh tanggal ke kepingan baharu, mengelakkan banyak operasi penyalinan:

<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>

Penyingkiran Di Tempat dengan Berbasikal

Untuk melakukan dalam -letakkan penyingkiran, kekalkan dua indeks, tetapkan elemen yang tidak boleh ditanggalkan sambil menyifarkan 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 Cara Mengalih Keluar Elemen daripada Slice Dalam Gelung dalam Go: Apakah Amalan Terbaik?. 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