13

是否可以在 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
}
4

2 回答 2

17

有什么问题

i := 1
for _, v := range array {
    // do something
    i += 4
}

如果您想要索引以外的 i 值,或者如果您想跳过索引,

for i := 1; i < len(array); i += 4 {
    v := array[i]
}

?

于 2013-09-02T06:29:34.530 回答
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 确实允许您构建这样的抽象,但需要一点努力。

于 2017-07-23T07:52:34.267 回答