首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-08 22:18:30
轉載
1013 人瀏覽過

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

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!