有没有一种方法可以迭代一系列整数?

286

Go的range可以迭代地遍历maps和slices,但我想知道是否有一种方法可以迭代数值范围,就像这样:

for i := range [1..10] {
    fmt.Println(i)
}

在Go语言中是否有一种像Ruby的Range类那样表示整数范围的方法?


关于C++的同样问题(最初发布于2013年),仅供比较参考。 - einpoklum
13个回答

0
正如其他人所回答的,目前语言中不支持这种方式。Go 语言的惯用方法是使用 for 循环。
然而,最近 RSC 提出了一个提案,扩展了range以便迭代整数。

如果 n 是整数类型,那么 for x := range n { ... } 将完全等同于 for x := T(0); x < n; x++ { ... },其中 T 是 n 的类型(假设在循环体中未修改 x)。

我对这个提案能够被纳入语言中持乐观态度。

0
问题不在于范围,而在于如何计算切片的结尾。 使用固定数字10的简单for循环是可以的,但是使用像bfl.Size()这样的计算出来的size就会在每次迭代中调用一次函数。使用int32的简单range循环可以帮助解决这个问题,因为它只会对bfl.Size()进行一次评估。
type BFLT PerfServer   
  func (this *BFLT) Call() {
    bfl := MqBufferLCreateTLS(0)                                                                                   
    for this.ReadItemExists() {                                                                                    
      bfl.AppendU(this.ReadU())                                                                                    
    }
    this.SendSTART()
    // size := bfl.Size() 
    for i := int32(0); i < bfl.Size() /* size */; i++ {                                                                             
      this.SendU(bfl.IndexGet(i))                                                                                  
    }
    this.SendRETURN()
  }

-1
package main

import "fmt"

func main() {

    nums := []int{2, 3, 4}
    for _, num := range nums {
       fmt.Println(num, sum)    
    }
}

1
为您的代码添加一些上下文以帮助未来读者更好地理解其含义。 - Grant Miller
3
这是什么?sum未定义。 - naftalimich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接