如何将一种数字类型的切片转换为另一种类型

我正在试验 Go 语言并且对它很陌生。我已经成功地完成了教程,现在正在编写一个小程序来评估我通常执行的操作类型的性能。我有一个很长的 float32 类型切片,需要尽可能有效地将其转换为 float64 类型的切片。除了遍历切片的元素并通过 output[i] = float64(data[i]) 显式转换单个元素的类型之外,是否有其他方法可以用来转换整个切片而无需迭代?我试过寻找解决方案,但没有找到任何直接相关的东西。


MMTTMM
浏览 209回答 2
2回答

慕少森

Go 是相当低级的,这意味着迭代切片是最有效的方法。其他语言可能有这些东西的内置函数,但它们所做的只是遍历切片,没有迭代就没有办法做到这一点。但是有一些技巧,特别是使用范围并避免索引切片,因为越界检查有开销。这将是最有效的:func convertTo64(ar []float32) []float64 {&nbsp; &nbsp;newar := make([]float64, len(ar))&nbsp; &nbsp;var v float32&nbsp; &nbsp;var i int&nbsp; &nbsp;for i, v = range ar {&nbsp; &nbsp; &nbsp; newar[i] = float64(v)&nbsp; &nbsp;}&nbsp; &nbsp;return newar}slice32 := make([]float32, 1000)slice64 := convertTo64(slice32)请注意,:=在范围循环中使用 的效率低下,因为在 Go 的当前版本中,变量每次都被丢弃并重新创建,而不是被重用。使用range而不是for i=0; i<n; i++更有效,因为它节省了对 的边界检查ar。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go