Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memulakan kepingan dengan kedua-dua nilai awal dan kapasiti?

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

WBOY
WBOYke hadapan
2024-02-08 22:18:301017semak imbas

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)    
}

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]
}

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]
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam