在golang中动态调整大小的数组?

时间:2019-08-10 11:16:46

标签: go

我想知道是否有什么方法可以创建动态大小的数组,以避免下面的代码出现运行时错误。

错误:

  

紧急:运行时错误:Go中的索引超出范围

代码:

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func nextLargerNodes(head *ListNode) []int {

    var a []int
    var pha int
    hNum := 0
    currNode := head
    pha = 0
    for currNode.Next != nil {
        iter := currNode.Next
        hNum = currNode.Val
        //phb = pha + 1
        for(iter.Next != nil){
            if hNum < iter.Val {
                hNum = iter.Val
                break
            } else if hNum == iter.Val{
                hNum = 0
                break
            }

            iter = iter.Next
        }
        a[pha] = iter.Val
        pha++
        hNum = 0
        currNode = currNode.Next
    }
    return a
}

2 个答案:

答案 0 :(得分:1)

您应该使用append函数。

  

var a [] int

是一个切片,您可以将其视为“动态数组”。为了向其中添加元素,您应该使用append方法。在代码中,您使用了数组语义。

a = append(a, iter.Val)

如果您预先知道切片中将要包含多少个元素,则可以使用预定义数量的元素来创建切片。

a := make([]int, 10)

这将创建一个包含10个元素的切片。

答案 1 :(得分:0)

Go数组的大小是固定的,但是由于内置的​​append方法,我们获得了动态行为。 append返回对象的事实确实突出了以下事实:如果需要,将创建一个新数组。追加使用的增长算法是使现有容量增加一倍。

numbers := make([]int, 0)
numbers = append(numbers, 1)
numbers = append(numbers, 2)
fmt.Println(len(numbers)) // == 2