1

我正在阅读有效的页面,我遇到了以下内容。

最后,Go 没有逗号运算符,并且 ++ 和 -- 是语句而不是表达式。因此,如果您想在 for 中运行多个变量,您应该使用并行赋值(尽管这排除了 ++ 和 --)。

// 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,但是为什么后面有一个逗号len(a)-1。我不理解该部分以及该条件中的其他一些部分。

谢谢 :)

4

2 回答 2

3

i被赋予初始值 0,并被j赋予len(a)-1. i将在j每次循环迭代时递增和递减,同时从两端索引数组,并交换它们的值。

这个例子利用了 Go将多个表达式的值分配给多个 Lvalues 的能力

于 2016-10-27T01:22:04.027 回答
2

@nothingmuch 的分析是正确的,但我根本不喜欢这个片段。我喜欢 go 的一个特点是缺少聪明的 one liner。我觉得如果再展开一点,整个片段会更具可读性:

i := 0
j := len(a) - 1
for i < j {
    a[i], a[j] = a[j], a[i]
    i++
    j--
}
于 2016-10-27T01:54:19.907 回答