我正在通过effective go页面阅读,并且我来到了以下地方。
最后,Go没有逗号运算符,++和 - 语句不是 表达式。因此,如果您想在a中运行多个变量 应该使用并行分配(虽然这排除了++和 - )。
// Reverse a for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 { a[i], a[j] = a[j], a[i] }
如果有人可以解释并分解这个for循环中发生的事情,那会很有帮助。
我理解i, j := 0
声明了变量i和j,但是为什么有一个commar后跟len(a)-1
。我不理解那部分以及条件中的其他部分。
谢谢:)
答案 0 :(得分:3)
i
的初始值为0,j
的分配为len(a)-1
。对于每次循环迭代,i
将递增,j
将递减1,同时从两端索引数组,并交换它们的值。
此示例使用Go的ability to assign the values of multiple expressions to multiple Lvalues。
答案 1 :(得分:2)
@ nothingmuch的分析是正确的,但我根本不喜欢这个片段。我喜欢的一个功能是缺乏聪明的一个衬垫。我觉得如果再展开一点,整个片段就会更具可读性:
i := 0
j := len(a) - 1
for i < j {
a[i], a[j] = a[j], a[i]
i++
j--
}