登录
首页 >  Golang >  Go问答

在迭代切片并通过“append()”修改它时出现“切片边界超出范围”错误

来源:stackoverflow

时间:2024-04-15 15:42:28 476浏览 收藏

你在学习Golang相关的知识吗?本文《在迭代切片并通过“append()”修改它时出现“切片边界超出范围”错误》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我编写了一个函数,用字符串切片([]string)中的一个单词替换重复单词的序列。我使用“range”循环切片并使用“append()”修改切片。下面是代码:

func removecontinuosstrings(input []string) []string {  
        top:=0

        for i,_ := range input {
                if input[i] != input[top] {
                        if top != i-1 {
                                input = append(input[:top+1], input[i:]...)
                        }   
                        top = i 
                }   
        }   
        return input[:top+1]
}

func main() {

        scanner := bufio.newscanner(os.stdin)
        fmt.println("enter text")
        input := make([]string, 0, 0)

        for scanner.scan() {
                input = append(input, scanner.text())
        }   

        fmt.println("input", input)
        input = removecontinuosstrings(input)
        fmt.println("output", input)
}

在执行上述代码时,我看到以下错误:

===================================================  
    vignesh@vignesh-ThinkPad-E470 ~/go-book/chapter4 $ ./4_6_eliminate_duplicate_string  
    enter text
    qwe
    asd
    asd
    zxc
    asd
    asd
    INPUT [qwe asd asd zxc asd asd]
    panic: runtime error: index out of range

    goroutine 1 [running]:
    main.RemoveContinuosStrings(0xc420088000, 0x6, 0x8, 0x20, 0x0, 0x0)
        /home/vignesh/go-book/chapter4/4_6_eliminate_duplicate_string.go:11 +0x2a0
    main.main()
        /home/vignesh/go-book/chapter4/4_6_eliminate_duplicate_string.go:33 +0x33a
    vignesh@vignesh-ThinkPad-E470 ~/go-book/chapter4 $ 
=======================================================

因此,没有错误或不允许附加到通过“范围”迭代的切片。我在网上看到了几个例子,它们确实附加到切片,但在不使用“范围”的情况下进行迭代(例如:for i=0; i< lenofslice; i++)。如果我错了,请帮助/纠正我:)


解决方案


当您在循环内更改数组大小时,请记住使用简单的 for 而不是 for range

func RemoveContinuosStrings(input []string) []string {
    top:=0

    for i:=0;i<len(input);i++ {
        if input[i] != input[top] {
            if top != i-1 {
                input = append(input[:top+1], input[i:]...)
                i=top+1
                top=top+1
            }else{
                top = i
            }
        }
    }
    return input[:top+1]
}

终于介绍完啦!小伙伴们,这篇关于《在迭代切片并通过“append()”修改它时出现“切片边界超出范围”错误》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>