首页 > 解决方案 > 在数组/切片中转换项目值

问题描述

我想创建一个新数组,其中每个值是原始数组中相应值的 2 倍,我的代码有什么问题?

func main() {
  myArray := []string{"1", "2", "3"}
  var newArray = []string

  for i, arr := range myArray {
    newArray = newArray[i] * 2
  }

  fmt.Println(newArray)
}

标签: go

解决方案


  1. 使用整数切片而不是字符串切片。即[]string{"1", "2", "3"}-> []int{1, 2, 3}
  2. 类型不是值。ievar newArray = []string是一个无效的声明。要初始化一个空切片省略=运算符,或者使用复合类型文字,或者在这种情况下甚至更好,使用make长度为myArray.
  3. 未使用的块变量在 Go 中是非法的。即arrinfor i, arr := myArray {没有在循环中使用,因此会导致编译时错误。
  4. 您不能将字符串与整数相乘。即newArray[i] * 2where newArrayis of type[]string是非法的,会导致编译时错误。
  5. 您不能更改变量的类型。即newArray = newArray[i] * 2if newArrayis of type[]int该语句是非法的,因为newArray[i] * 2将评估为int并且您不能分配int给 type 的变量[]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


推荐阅读