Bagaimana untuk memulakan kepingan dengan kedua-dua nilai awal dan kapasiti?

WBOY
Lepaskan: 2024-02-08 22:18:30
ke hadapan
1013 orang telah melayarinya

Bagaimana untuk memulakan kepingan dengan kedua-dua nilai awal dan kapasiti?

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!

Kandungan soalan

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

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

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

Penyelesaian

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

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

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

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!

sumber:stackoverflow.com
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!