editor php Baicao akan memperkenalkan kepada anda cara menggunakan kedua-dua nilai awal dan kapasiti semasa permulaan kepingan untuk meningkatkan kecekapan kod. Dalam PHP, slice ialah tatasusunan dinamik yang boleh berkembang atau mengecut secara dinamik mengikut keperluan. Biasanya, apabila memulakan kepingan, kita boleh menentukan nilai awal, tetapi kita tidak boleh menentukan kapasiti secara langsung. Walau bagaimanapun, terdapat helah untuk memulakan kepingan menggunakan kedua-dua nilai awal dan kapasiti, mari kita lihat!
Sebahagian kod adalah seperti berikut:
const estimatedsize = 10000 var init_arr = [...]int{1,1,2,3,5,8,13} var fibbo []int = make([]int, len(init_arr), estimatedsize) }
Slicesfibbo
在c++中没有像向量
那样的reserved
函数来为切片保留estimatedsize
untuk mengurangkan masa salinan apabila mengembangkan kapasiti. Jadi saya hanya boleh menetapkan anggaran saiz kepada kapasiti pada masa permulaan. Tetapi kedua-duanya tidak sah.
var fibbo []int = init_arr[::estimatedsize] var fibbo []int = make([]int{1,1,2,3,5,8,13}, len(init_arr), estimatedsize)
Adakah penyelesaian untuk masalah ini? Atau mungkin ia kod kekok dan berikut adalah satu-satunya cara?
var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE) for i:= range init_arr { fibbo[i] = init_arr[i] }
Tidak, ini tidak mungkin. Ia merupakan sebahagian daripada falsafah reka bentuk go yang membimbing keputusan reka bentuk ini: "Jangan sembunyikan kerumitan
."Kod "kikuk" anda sebenarnya adalah cara pilihan dan idiomatik untuk melakukan ini secara berterusan, dengan satu perubahan kecil:
var fibbo = make([]int, len(init_arr), estimatedsize) for i := range init_arr { fibbo[i] = init_arr[i] }
Satu-satunya perubahan yang saya buat (selain pemformatan) ialah mengalih keluar jenis daripada var
pengisytiharan, kerana ia berlebihan sepenuhnya. Dengan kata lain:
-var fibbo []int = make([]int, len(init_arr), estimatedsize) +var fibbo = make([]int, len(init_arr), estimatedsize)
Seperti yang dinyatakan dalam ulasan, jika anda tidak membuat sebarang perubahan lain pada input, anda juga boleh menggunakan terbina dalam copy
untuk menghapuskan gelung for:
var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE) copy(fibbo, init_arr)
Atas ialah kandungan terperinci Bagaimana untuk memulakan kepingan dengan kedua-dua nilai awal dan kapasiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!