Rumah > Artikel > pembangunan bahagian belakang > Bincangkan operasi pengubahsuaian hirisan golang
Dalam bahasa Go, slice ialah struktur data yang berkuasa yang boleh mengendalikan blok data berterusan dengan mudah. Berbanding dengan tatasusunan, kepingan mempunyai panjang berubah-ubah dan elemen boleh ditambah atau dialih keluar, menjadikan kepingan sebagai salah satu struktur data yang kerap digunakan dalam Go.
Walau bagaimanapun, apabila menggunakan slice, sudah semestinya kita perlu mengubah suai beberapa elemen dalam hirisan Artikel ini akan meneroka operasi pengubahsuaian slice.
Untuk mengubah suai elemen dalam kepingan, anda boleh menggunakan indeks untuk mengakses elemen dalam kepingan seperti tatasusunan. Sebagai contoh, kod berikut menunjukkan cara mengubah suai elemen pada kedudukan yang ditentukan dalam kepingan:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4} fmt.Println(nums) // 输出 [1 2 3 4] nums[1] = 5 fmt.Println(nums) // 输出 [1 5 3 4] }
Dalam kod di atas, kita mula-mula memulakan hirisan yang mengandungi 4 integer, dan kemudian mengubah suai nilai bagi elemen kedua hingga 5. Akhirnya, kami mencetak kepingan yang diubah suai. Seperti yang anda lihat, pengubahsuaian telah berjaya.
Kita boleh menggunakan fungsi append() terbina dalam untuk menambah elemen untuk dihiris. Cara paling mudah untuk mengubah suai kepingan adalah dengan menggunakan fungsi append(). Fungsi append() digunakan serupa dengan Array.push() dalam JavaScript. Kod berikut menunjukkan cara menambah elemen pada kepingan:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4} fmt.Println(nums) // 输出 [1 2 3 4] nums = append(nums, 5) fmt.Println(nums) // 输出 [1 2 3 4 5] }
Dalam kod di atas, kita mula-mula memulakan hirisan yang mengandungi 4 integer, dan kemudian gunakan fungsi append() untuk menambah 5 pada penghujung kepingan itu. Akhirnya, kami mencetak kepingan yang ditambah. Seperti yang anda lihat, penambahan itu berjaya.
Perlu diambil perhatian bahawa jika bilangan elemen dalam hirisan telah mencapai kapasitinya, tatasusunan asas mungkin mengagihkan semula ruang apabila menambah elemen, yang akan menyebabkan kemerosotan prestasi. Oleh itu, untuk mengelakkan pengagihan semula ruang yang tidak perlu semasa menambah elemen, kita harus menggunakan cap() fungsi terbina dalam terlebih dahulu untuk menentukan sama ada pengembangan diperlukan:
if len(nums)+1 > cap(nums) { newNums := make([]int, len(nums), cap(nums)*2) copy(newNums, nums) nums = newNums }
Coretan kod ini menyemak sama ada terdapat mencukupi ruang dalam keping Kapasiti untuk menambah elemen baharu. Jika tidak, buat kepingan baharu dengan kapasiti dua kali ganda dan gunakan fungsi copy() untuk menyalin semua elemen daripada kepingan lama ke kepingan baharu. Akhir sekali, tetapkan kepingan baharu kepada kepingan asal. Pendekatan ini lebih cekap kerana ia mengelakkan pengalokasian semula kepingan asal dan sebaliknya mengembangkan kapasiti tatasusunan asas.
Sama seperti menambah elemen, kita boleh mengalih keluar elemen daripada hirisan menggunakan append() fungsi terbina dalam. Dalam Go, tiada fungsi pemadaman terbina dalam, kita perlu menggunakan fungsi append() untuk memadamkan elemen dalam kepingan. Kod berikut menunjukkan cara untuk memadam elemen daripada hirisan:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4} fmt.Println(nums) // 输出 [1 2 3 4] nums = append(nums[:1], nums[2:]...) fmt.Println(nums) // 输出 [1 3 4] }
Dalam kod di atas, kita mula-mula memulakan hirisan yang mengandungi 4 integer, dan kemudian gunakan fungsi append() untuk memadamkan elemen kedua. Khususnya, kami mula-mula menyambungkan subslice daripada elemen pertama kepada elemen kedua (eksklusif) dan subslice dari elemen ketiga kepada elemen terakhir, dengan itu mendapatkan kepingan baharu dan menetapkannya kepada kepingan Asal.
Perlu diambil perhatian bahawa memandangkan slice dalam Go ialah struktur, ia mengandungi penunjuk kepada tatasusunan asas, panjang dan maklumat kapasiti kepingan, jadi apabila kita memadamkan elemen dalam kepingan, ia mesti dicipta semula Sekeping baharu dan menyalin unsur-unsur daripada kepingan asal kepada kepingan baharu.
Jika anda ingin mengubah suai berbilang elemen dalam kepingan, anda boleh menggunakan gelung for untuk melintasi kepingan dan mengubah suainya pada setiap lelaran Unsur semasa. Kod berikut menunjukkan cara mengubah suai berbilang elemen dalam hirisan:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4} fmt.Println(nums) // 输出 [1 2 3 4] for i := 0; i < len(nums); i++ { nums[i] *= 2 } fmt.Println(nums) // 输出 [2 4 6 8] }
Dalam kod di atas, kita mula-mula memulakan hirisan yang mengandungi 4 integer, kemudian gunakan gelung for untuk melintasi hirisan dan darabkan elemen semasa ambil 2.
Perlu diambil perhatian bahawa apabila mengubah suai berbilang elemen dalam kepingan, elemen semasa perlu dikira semula dan disalin ke kepingan semasa setiap lelaran. Ini bukan sahaja tidak cekap, ia juga terdedah kepada ralat.
Ringkasan
Di atas ialah pengenalan kepada operasi pengubahsuaian kepingan dalam Go. Untuk mengubah suai elemen individu dalam kepingan, anda boleh menggunakan pengindeksan untuk mengakses elemen dalam kepingan sama seperti tatasusunan. Untuk menambah elemen pada kepingan, kita boleh menggunakan fungsi terbina dalam append(). Untuk mengalih keluar elemen daripada kepingan, kita boleh menggunakan fungsi append() dan mengalih keluar elemen yang ditentukan dengan menggabungkan dua sub-kepingan. Akhir sekali, jika anda ingin mengubah suai berbilang elemen dalam kepingan, gunakan gelung for untuk menggelung seluruh kepingan dan ubah suai elemen semasa pada setiap lelaran.
Atas ialah kandungan terperinci Bincangkan operasi pengubahsuaian hirisan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!