Bagaimana untuk Mengeluarkan Elemen daripada Slice Secara Berulang dalam Go?

DDD
Lepaskan: 2024-10-30 21:07:30
asal
567 orang telah melayarinya

How to Remove Elements from a Slice Iteratively in Go?

Alih Keluar Elemen daripada Slice Secara Berulang

Apabila melelaran di atas kepingan, mengalih keluar elemen dalam gelung boleh menjadi sukar kerana peralihan unsur-unsur seterusnya. Pendekatan biasa yang salah ialah menggunakan append untuk mengalih keluar elemen, seperti yang dilihat dalam contoh di bawah:

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := range a { // BAD
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
Salin selepas log masuk

Kaedah ini tidak berfungsi dengan betul kerana gelung tidak mengambil kira elemen yang dialihkan. Untuk mengalih keluar elemen dengan betul semasa melelakan, anda boleh sama ada menggunakan gelung ke bawah atau menggunakan kaedah alternatif yang mengelakkan operasi penyalinan berterusan.

Gelung Ke Bawah

Gelung ke bawah berulang dalam susunan terbalik, bermula dari elemen terakhir. Pendekatan ini membolehkan anda mengalih keluar elemen tanpa perlu mengurangkan pembolehubah gelung secara manual:

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
for i := len(a) - 1; i >= 0; i-- {
    if conditionMeets(a[i]) {
        a = append(a[:i], a[i+1:]...)
    }
}</code>
Salin selepas log masuk

Kaedah Ganti untuk Banyak Penyingkiran

Jika anda perlu mengalih keluar sejumlah besar elemen, menggunakan append boleh menjadi tidak cekap kerana penyalinan yang berlebihan. Pendekatan alternatif ialah membuat kepingan baharu dan menyalin hanya elemen yang tidak boleh ditanggalkan:

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
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 untuk Banyak Pembuangan (Tujuan Umum)

Teknik penyingkiran di tempat melibatkan mengekalkan dua indeks dan menetapkan elemen tidak boleh alih dalam kepingan yang sama sambil menyifar lokasi elemen yang dialih keluar:

<code class="go">a := []string{"abc", "bbc", "aaa", "aoi", "ccc"}
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 for garbage collection
}
a = a[:copied]</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen daripada Slice Secara Berulang dalam Go?. 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
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!