登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-03-21 20:24:20 188浏览 收藏

大家好,今天本人给大家带来文章《如何将一种数字类型的切片转换为另一种类型》,文中内容主要涉及到golang,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

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

正确答案

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更有效,因为它节省了对ar.

到这里,我们也就讲完了《如何将一种数字类型的切片转换为另一种类型》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>