Go中两个变量的for循环

新手上路,请多包涵

Go 中不允许使用以下 for 循环,

 for i := 0, j := 1; i < 10; i++, j++ {...}

以下两个变量的 for 循环的正确等价物是什么?

 for (int i = 0, j = 1; i < 10; i ++ , j ++) {...}

原文由 sof 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您没有逗号运算符来连接多个语句,但您确实有多个赋值,所以 这有效

 package main

import (
    "fmt"
)

func main() {
    for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
        fmt.Println("Hello, playground")
    }
}

原文由 twotwotwo 发布,翻译遵循 CC BY-SA 3.0 许可协议

虽然上面的答案被接受了,但它完全满足了需要。但我想对此做一些进一步的解释。

Golang 不支持许多可以用简单的方式完成的事情。 For 循环是最常见的例子。 Go 的 For 循环的美妙之处在于它将许多现代风格的循环合并到一个关键字中。

Golang 同样处理多变量声明和赋值。针对上述问题,我们可以使用Golang提供给我们的这个简单工具来解决多变量for循环。如果您想查看进一步的解释,这个问题提供了进一步的细节和 在一个语句中声明多个变量的 方法。

回到 for 循环,如果我们想声明相同数据类型的变量,我们可以用这个声明它们

var a,b,c string

但是我们在 for 循环中使用简写,这样我们就可以用相同的值来初始化它们

  i,j := 0,1

不同的数据类型和不同的值

如果我们想要声明不同类型的变量并想要分配不同的值,我们可以通过分隔变量名称和在 := 之后用逗号分隔不同的值来实现。例如

 c,i,f,b := 'c',23423,21.3,false

赋值运算符的使用

稍后,我们可以使用相同的方法为多个变量赋值。

     x,y := 10.3, 2
    x,y = x+10, y+1

在单个语句中混合结构和普通类型

甚至我们也可以以相同的方式使用结构类型或指针。这是一个迭代链接列表的函数,它被定义为一个结构

func (this *MyLinkedList) Get(index int) int {
    for i,list := 0,this; list != nil; i,list = i+1,list.Next{
        if(i==index){
            return list.Val
        }
    }
    return -1
}

该列表定义为

type MyLinkedList struct {
      Val int
      Next *MyLinkedList

 }

回答原始问题

来到起源问题,简单地可以做到

for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
        fmt.Println("i,j",i,j)
    }

原文由 Abdul Rehman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏