You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在for循环中用range反向迭代?变量从upperIndex到lowerIndex遍历求解

嘿,我来帮你搞定这两个Go语言迭代相关的问题!

问题1:如何在for循环中使用range进行反向迭代?

Go语言的range关键字本身并不直接支持反向迭代,但我们可以通过几种变通方法实现类似效果:

  • 方案1:先反转集合再用range遍历
    如果要迭代的是切片、数组这类集合,可以先把集合反转,再用range正常遍历。注意如果不想修改原集合,记得先创建副本:
package main

import "fmt"

func main() {
    original := []int{1, 2, 3, 4, 5}
    // 创建副本避免修改原数据
    reversed := make([]int, len(original))
    copy(reversed, original)
    
    // 反转副本
    for i, j := 0, len(reversed)-1; i < j; i, j = i+1, j-1 {
        reversed[i], reversed[j] = reversed[j], reversed[i]
    }
    
    // 用range遍历反转后的集合
    for idx, val := range reversed {
        fmt.Printf("索引:%d,值:%d\n", idx, val)
    }
}
  • 方案2:手动通过索引反向遍历(模拟range效果)
    如果不想反转集合,直接通过索引从后往前循环,同时获取索引和对应值,完全能达到range的遍历效果:
package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    // 从最后一个索引开始,直到索引0
    for i := len(nums)-1; i >= 0; i-- {
        fmt.Printf("索引:%d,值:%d\n", i, nums[i])
    }
}
问题2:在switch的default分支中实现从upperIndex到lowerIndex的倒序计数遍历

Go的range确实没办法直接指定自定义的反向数值范围,但用传统的for循环结构就能完美解决,不管upperIndexlowerIndex是变量还是固定值都适用。

直接在default分支里这么写就行:

package main

import "fmt"

func main() {
    var input int = 99 // 触发default分支的测试值
    upperIndex := 15
    lowerIndex := 8

    switch input {
    case 1:
        fmt.Println("执行case 1的逻辑")
    case 2:
        fmt.Println("执行case 2的逻辑")
    default:
        // 从upperIndex倒序遍历到lowerIndex(包含两个端点)
        for i := upperIndex; i >= lowerIndex; i-- {
            fmt.Printf("当前计数:%d\n", i)
        }
    }
}

如果是要遍历切片中对应索引范围的元素,只需要在循环里加上切片取值即可:

default:
    targetSlice := []int{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
    // 倒序遍历切片中索引从upperIndex到lowerIndex的元素
    for i := upperIndex; i >= lowerIndex; i-- {
        fmt.Printf("索引:%d,对应值:%d\n", i, targetSlice[i])
    }

内容的提问来源于stack exchange,提问作者Martin Muldoon

火山引擎 最新活动