php小編百草將為大家介紹如何在切片初始化時同時使用初始值和容量,以提高程式碼的效率。在PHP中,切片是一種動態數組,可根據需要動態增長或縮小。通常,在初始化切片時,我們可以指定初始值,但無法直接指定容量。然而,有一個技巧可以同時使用初始值和容量來初始化切片,讓我們一起來看看吧!
部分程式碼如下:
const estimatedsize = 10000 var init_arr = [...]int{1,1,2,3,5,8,13} var fibbo []int = make([]int, len(init_arr), estimatedsize) }
切片fibbo
在c 中沒有像向量
那樣的reserved
函數來為切片保留estimatedsize
以減少擴展容量時的複製時間。所以我只能在初始化時將estimatedsize分配給容量。但以下兩者都不合法。
var fibbo []int = init_arr[::estimatedsize] var fibbo []int = make([]int{1,1,2,3,5,8,13}, len(init_arr), estimatedsize)
這個問題有辦法嗎?或者可能是笨拙的程式碼,如下是唯一的方法?
var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE) for i:= range init_arr { fibbo[i] = init_arr[i] }
不,這是不可能的。這是 go 設計哲學的一部分,它指導了這個設計決策:「不要隱藏複雜性。」
你的「笨拙」程式碼實際上是在 go 中執行此操作的首選且慣用的方式,只需進行一個小的更改:
var fibbo = make([]int, len(init_arr), estimatedsize) for i := range init_arr { fibbo[i] = init_arr[i] }
(除了格式之外),我所做的唯一更改是從 var
聲明中刪除類型,因為這完全是多餘的。換句話說:
-var fibbo []int = make([]int, len(init_arr), estimatedsize) +var fibbo = make([]int, len(init_arr), estimatedsize)
如評論中指出的,如果您不對輸入進行任何其他更改,您也可以使用內建的 copy
來消除 for 迴圈:
var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE) copy(fibbo, init_arr)
以上是如何同時使用初始值和容量初始化切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!