我正在试验 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 关注
- 208 浏览
添加回答
举报
0/150
提交
取消