登录
首页 >  Golang >  Go问答

更新数组/切片的元素值

来源:stackoverflow

时间:2024-02-13 17:33:24 235浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《更新数组/切片的元素值》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

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

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

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

  fmt.Println(newArray)
}

正确答案


  1. 使用整数切片而不是字符串切片。即 []string{"1", "2", "3"} -> []int{1, 2, 3}
  2. 类型不是值。即 var newarray = []string 是无效语句。要初始化空切片,请忽略 = 运算符,或使用复合类型文字,或者在这种情况下更好,使用长度为 myarraymake
  3. 未使用的块变量在 go 中是非法的。即 arr 中的 for i, arr := myarray { 未在循环内使用,因此会导致编译时错误。
  4. 不能将字符串与整数相乘。即 newarray[i] * 2 其中 newarray 的类型为 []string 是非法的,会导致编译时错误。
  5. 您无法更改变量的类型。即 newarray = newarray[i] * 2 如果 newarray 的类型为 []int 该语句是非法的,因为 newarray[i] * 2 将计算为 int 并且您不能将 int 分配给 a []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

你的语法有很多问题。 您声明数组错误(您的第一个数组将 myarray 声明为切片,第二个数组无效并且无法编译),并且您正在尝试将字符串相乘。 您声明了 arr 但没有使用它,这也会给出编译错误。

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

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)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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