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

转换数组/切片中的项目值

转换数组/切片中的项目值

Go
慕容森 2022-10-04 19:59:57
我想创建一个新数组,其中每个值是原始数组中相应值的2倍,我的代码有什么问题?func main() {  myArray := []string{"1", "2", "3"}  var newArray = []string  for i, arr := range myArray {    newArray = newArray[i] * 2  }  fmt.Println(newArray)}
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

  1. 使用整数切片而不是字符串切片。即 -> .[]string{"1", "2", "3"}[]int{1, 2, 3}

  2. 类型不是值。即 是无效语句。若要初始化空切片,请省略运算符,或使用复合类型文本,或者在这种情况下更好,请使用 的长度 。var newArray = []string=makemyArray

  3. 未使用的块变量在 Go 中是非法的。即,在循环中不使用 in,因此会导致编译时错误。arrfor i, arr := myArray {

  4. 不能将字符串与整数相乘。即 其中 的类型是非法的,将导致编译时错误。newArray[i] * 2newArray[]string

  5. 不能更改变量的类型。即 如果 是 类型,则该语句是非法的,因为计算结果为 ,并且您无法赋值给 类型的变量。newArray = newArray[i] * 2newArray[]intnewArray[i] * 2intint[]int

func main() {

    myArray := []int{1, 2, 3}

    newArray := make([]int, len(myArray))


    for i := range myArray {

        newArray[i] = myArray[i] * 2

    }


    fmt.Println(newArray)

}

https://play.golang.org/p/Tc0-51GiAhS


查看完整回答
反对 回复 2022-10-04
?
茅侃侃

TA贡献1842条经验 获得超22个赞

您的语法有相当多的问题。你声明你的数组是错误的(你的第一个数组将myArray声明为切片,你的第二个数组无效并且不会编译),并且你正在尝试乘以字符串。您正在声明 arr 但不使用它,这也会导致编译错误。


此代码段将使用 ints 执行您想要的操作:


myArray := [3]int{1, 2, 3}

newArray := myArray // copies the original array to a new one


for i := range myArray { // don't care about the value, only the index

    newArray[i] *= 2  // double the values in the new array

}


fmt.Println(newArray)

另一种无需先复制原始阵列的替代方案:


myArray := [3]int{1, 2, 3}

newArray := [3]int{}


for i := range myArray {

    newArray[i] = myArray[i] * 2

}


fmt.Println(newArray)


查看完整回答
反对 回复 2022-10-04
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号