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

Mary-Kate Olsen
Lepaskan: 2024-10-28 05:01:30
asal
189 orang telah melayarinya

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>
Salin selepas log masuk

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--
    }
}
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!