首頁  >  文章  >  後端開發  >  如何同時使用初始值和容量初始化切片?

如何同時使用初始值和容量初始化切片?

WBOY
WBOY轉載
2024-02-08 22:18:301013瀏覽

如何同時使用初始值和容量初始化切片?

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除