Go

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

发布于 2021-02-01 11:11:35

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

关注者
0
被浏览
111
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    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)
    

    请注意,:=在范围循环中使用in效率不高,因为在当前版本的Go中,变量每次都被丢弃并重新创建,而不是被重用。使用range代替for i=0; i<n; i++会更有效,因为它可以节省的边界检查ar



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看