在Go语言中有foreach结构吗? 我可以迭代一个片或数组使用for?
当前回答
实际上,你可以对你的类型使用for range而不引用它的返回值:
arr := make([]uint8, 5)
i,j := 0,0
for range arr {
fmt.Println("Array Loop", i)
i++
}
for range "bytes" {
fmt.Println("String Loop", j)
j++
}
https://play.golang.org/p/XHrHLbJMEd
其他回答
是的,范围:
for循环的range形式在片或映射上迭代。
当范围超过一个片时,每次迭代都会返回两个值。第一个是索引,第二个是该索引处元素的副本。
例子:
package main
import "fmt"
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main() {
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
for i := range pow {
pow[i] = 1 << uint(i) // == 2**i
}
for _, value := range pow {
fmt.Printf("%d\n", value)
}
}
可以通过赋值给_来跳过索引或值。 如果只需要索引,则完全删除,值。
我看到很多使用范围的例子。只要注意一下,这个范围就会创建一个你迭代的对象的副本。如果对foreach范围内的内容进行更改,则不会更改原始容器中的值,在这种情况下,您将需要一个传统的for循环,其中包含一个递增的索引和遵循索引引用。例如:
for i := 0; i < len(arr); i++ {
element := &arr[i]
element.Val = newVal
}
这可能是显而易见的,但你可以像这样内联数组:
package main
import (
"fmt"
)
func main() {
for _, element := range [3]string{"a", "b", "c"} {
fmt.Print(element)
}
}
输出:
abc
https://play.golang.org/p/gkKgF3y5nmt
下面是如何在Go中使用foreach的示例代码:
package main
import (
"fmt"
)
func main() {
arrayOne := [3]string{"Apple", "Mango", "Banana"}
for index,element := range arrayOne{
fmt.Println(index)
fmt.Println(element)
}
}
这是一个运行中的示例https://play.golang.org/p/LXptmH4X_0
实际上,你可以对你的类型使用for range而不引用它的返回值:
arr := make([]uint8, 5)
i,j := 0,0
for range arr {
fmt.Println("Array Loop", i)
i++
}
for range "bytes" {
fmt.Println("String Loop", j)
j++
}
https://play.golang.org/p/XHrHLbJMEd
推荐文章
- TypeScript for…的索引/键?
- Linq风格的“For Each”
- foreach和map有区别吗?
- 如何获取切片的最后一个元素?
- 使用c++ 11的基于范围的正确方法是什么?
- 不能将数据(类型接口{})转换为类型字符串:需要类型断言
- 解析Go中的RFC-3339 / ISO-8601日期-时间字符串
- 声明一个常量数组
- 函数可以作为参数传递吗?
- [].slice的解释。调用javascript?
- 如何使用“测试”包打印Go测试?
- Go如何更新第三方包?
- 我如何应用for-each循环到字符串中的每个字符?
- 在PHP中使用foreach循环时查找数组的最后一个元素
- Go是如何编译得这么快的?