当前位置: 首页 > 面试题库 >

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

谷德本
2023-03-14
问题内容

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


问题答案:

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



 类似资料:
  • 问题内容: 一个激励人的例子: 实施各种调度“策略”,对“作业”列表进行排序。 一种非常简单的策略是首先执行最短的作业(不考虑其权重/优先级)。 嗯,这种策略只不过是对job.length进行排序,因此让我们使用sort包。定义一个自定义类型,并实现sort.Interface … 好了,现在回到我们的简单策略… 嗯… 问题答案: 首先, 即使您使用like ,也看不到任何定义 。 我认为您的意思

  • 问题内容: 从源(s,s,s)读取图像的最便捷方法是: 但是,然后, 如何转换为格式? 问题答案: 您可以创建所需类型的新BufferedImage,然后在其上绘制原始图像,如下所示:

  • 问题内容: 我想对Java变量进行动态转换,转换类型存储在其他变量中。 这是常规转换: 这就是我要的: 这有可能吗?谢谢! 更新资料 我正在尝试使用HashMap收到的A 填充类。 这是构造函数: 这里的问题是某些类的变量的类型是,如果接收到数字3,它会认为它是类型问题。 问题答案: 是的,可以使用反射 但这没有多大意义,因为必须将结果对象保存在类型变量中。如果你需要变量属于给定的类,则可以将其强

  • 如果按照“字节”->“短”->“int”->“长”->“浮点”->“双倍”的自动转换,那么输出应该打印“双倍”,对吗? (https://www.geeksforgeeks.org/type-conversion-java-examples/)

  • 问题内容: 我试图了解Go的类型转换规则。假设我们有以下接口: 为了满足这些接口,我们有一个类型: 这两个功能正在使用接口: 要使用这些方法,我可以编写以下内容: 第一个功能按预期工作;一个实现所有需求,这是一个功能。 但是,对于第二个函数,Go不会编译尝试的调用,并报告以下内容: 不能在allWoof的参数中将狗([] woofRunner类型)用作[] woofer类型 使用类型转换也是不可能

  • 问题内容: 我有一个数据库(),其中有数十个数据库,每个数据库都有许多(平均10-20),数据类型设置为。这绝对是致命的性能(其中一些列用于其中,某些表具有100K+行)。我想将所有这些列更改为。自动执行此操作的最佳方法是什么?(我可以使用,也可以创建一个实用程序来通过可访问db的网站执行此操作,以较容易的为准)。 问题答案: 这是一个工作脚本,用于查找所有列并将其转换为: 这是我曾经宽恕过的唯一