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!