Rumah >pembangunan bahagian belakang >Golang >Cara Mengalih Keluar Elemen daripada Slice Dalam Gelung dalam Go: Apakah Amalan Terbaik?
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!