为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMTTMM 2021-08-30 16:29:18
我正在试验 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。


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信