【问题标题】:Golang for loop with 2 variables equivalent?Golang for循环与2个变量等效?
【发布时间】:2022-01-26 03:21:44
【问题描述】:

我试图在 doc 中理解 golang 的语法,但有些东西即使他们解释也很难理解。

例如:

func Reverse(s string) string {
   r := []rune(s)
   for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
    r[i], r[j] = r[j], r[i]
   }
   return string(r)
}

我把它翻译成原始代码:

func reverseString2(str string) string {
    var array = []rune(str)
    for i := 0; i < len(str)/2; i++ {
        for j := len(str) - 1; ???? ; j-- {
          // ---
        }
    }
    return string(array)
}

我的问题是在第一个for i, j := 0, len(r)-1; i &lt; len(r)/2; i, j = i+1, j-1 中,j 似乎没有条件,所以在我的代码中我不知道如何解决它。

【问题讨论】:

  • 这 2 个不等价:i, j = i+1, j-1 每次迭代都会发生这种情况,都是递增的。在不显着更改算法的情况下,您无法真正将第一个单循环转换为嵌套循环。
  • 等价物是怎样的?
  • 你不能有嵌套循环的 equivalent 实现:这将是一些完全不同的算法。

标签: go


【解决方案1】:

这是另一种更容易阅读并导致相同结果的方式。 唯一不同的是变量j的作用域变了。

func Reverse(s string) string {
      r := []rune(s)
      j := len(r) - 1
      for i := 0; i < len(r)/2; i++ {
          r[i], r[j] = r[j], r[i]
          j--
      }
      return string(r)
}

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2015-09-26
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多