是否可以在Go语言中迭代数组索引并选择不是所有索引而是抛出一些句点(例如,1,2,3。
例如,
for i, v := range array {
//do something with i,v
}
遍历数组中的所有索引
我想知道的是有任何机会有类似的东西
for i:=1, v := range array {
//do something with i,v
i += 4
}
答案 0 :(得分:17)
有什么问题
i := 1
for _, v := range array {
// do something
i += 4
}
如果你想要除索引之外的i值,或者如果你想跳过索引,
for i := 1; i < len(array); i += 4 {
v := array[i]
}
答案 1 :(得分:0)
您正在寻找Golang中不存在的抽象。 Go设计“简单”。当然,简单本身就是一个非常相对和主观的术语。例如,以下内容对某些人来说很简单:
// This is not real Go code
for index, value := range(array, stride = 4, start = 1) {
...
}
那是因为它告诉编译器要做什么,而不是如何做 - 明确的抽象 - 如果没有改变的话,怎么可能改变。但是如何抽象。正是因为这个原因,其他一些人更愿意:
// This *is* real Go code
start := 1 // we start not at 0 but at one, just for fun
stride := 4 // we skip 3 between this and the next one of interest
for i: = start; i < len(array); i += stride {
...
}
此代码告诉您某些事情是如何完成的,作为副作用,您应该了解正在做什么。很少的抽象 - 但这是一种工程权衡,因为它既快又简单。 Go的大多数工程权衡在简单性和速度方面都是错误的。
Go确实让你通过一点点努力来构建这样的抽象。