我正在試驗 Go 語言并且對它很陌生。我已經成功地完成了教程,現在正在編寫一個小程序來評估我通常執行的操作類型的性能。我有一個很長的 float32 類型切片,需要盡可能有效地將其轉換為 float64 類型的切片。除了遍歷切片的元素并通過 output[i] = float64(data[i]) 顯式轉換單個元素的類型之外,是否有其他方法可以用來轉換整個切片而無需迭代?我試過尋找解決方案,但沒有找到任何直接相關的東西。
2 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
Go 是相當低級的,這意味著迭代切片是最有效的方法。其他語言可能有這些東西的內置函數,但它們所做的只是遍歷切片,沒有迭代就沒有辦法做到這一點。但是有一些技巧,特別是使用范圍并避免索引切片,因為越界檢查有開銷。這將是最有效的:
func convertTo64(ar []float32) []float64 {
newar := make([]float64, len(ar))
var v float32
var i int
for i, v = range ar {
newar[i] = float64(v)
}
return newar
}
slice32 := make([]float32, 1000)
slice64 := convertTo64(slice32)
請注意,:=在范圍循環中使用 的效率低下,因為在 Go 的當前版本中,變量每次都被丟棄并重新創建,而不是被重用。使用range而不是for i=0; i<n; i++更有效,因為它節省了對 的邊界檢查ar。
- 2 回答
- 0 關注
- 232 瀏覽
添加回答
舉報
0/150
提交
取消