动态地将每个值附加到GOLANG中的2D切片中

时间:2015-11-20 10:46:25

标签: arrays go append slice

我希望数据结构(数组或切片)看起来像这样:

[[a b c d e][f g h i j] [k l m n o] [p q r s t] [u v w x y]] 

这样a是节点与" A"之间的距离。到" A" 。 (应为0) b是节点与" A"之间的距离。到" B" 。 c是节点与" A"之间的距离。到" C"

f是节点与" B"之间的距离。到" A" 。 g是节点与" B"之间的距离。到" B" 。 (应为0) h是节点与" B"之间的距离。到" C"

现在我创建了一个像: var shortestPathSLice = make([][]int, 5)存储此2D数据。

在函数中的for循环中,我试图按如下方式动态填充此切片:

shortestPathSLice = append(shortestPathSLice[0][index], lowEstimate[0])

其中lowestimate [0]是两个节点之间最小距离的值。

然而,我得到一个错误:要追加的第一个参数必须是切片;有int

任何人都可以告诉我如何在切片中的每个元素中动态追加值?

**代码**

    var shortestPathSLice = make([][]int, 5)
    for index := 0; index < len(t.Location_ids); index++ {
    lowEstimate := make([]int, len(priceestimatestruct.Prices))
        for i := 0; i < len(priceestimatestruct.Prices); i++ {
            lowEstimate[i] = priceestimatestruct.Prices[i].LowEstimate
        }

        sort.Ints(lowEstimate)
        fmt.Println("LowEstimate array : ", lowEstimate)
        shortestPathSLice[0] = make([]int, len(lowEstimate))
        shortestPathSLice[0][index] = lowEstimate[0]
}

1 个答案:

答案 0 :(得分:2)

  

The Go Programming Language Specification

     

Appending to and copying slices

     

内置函数在公共切片中追加和复制辅助   操作。对于这两个函数,结果与是否无关   参数引用的内存重叠。

     

可变参数函数append将零或更多值x附加到s   type S,必须是切片类型,并返回结果切片,   也是S型。值x被传递给类型为...... T的参数   其中T是S的元素类型和相应的参数传递   规则适用。作为特例,append也接受第一个参数   可以使用字符串类型的第二个参数赋值给[]字节   后跟....这个表单附加字符串的字节。

append(s S, x ...T) S  // T is the element type of S
     

如果s的容量不足以容纳附加值,   append分配一个适合的新的,足够大的底层数组   现有的切片元素和附加值。除此以外,   append重新使用底层数组。

例如,使用append并使用索引

package main

import "fmt"

func main() {
    { // using append
        dim := 5
        matrix := make([][]int, dim) // dim*dim matrix
        for i := 0; i < dim; i++ {
            matrix[i] = make([]int, 0, dim)
            vector := make([]int, dim)
            for j := 0; j < dim; j++ {
                vector[j] = i*dim + j
                matrix[i] = append(matrix[i], vector[j])
            }
        }
        fmt.Println(matrix)
    }
    { // using index
        dim := 5
        matrix := make([][]int, dim) // dim*dim matrix
        for i := range matrix {
            matrix[i] = make([]int, dim)
            vector := make([]int, dim)
            for j := range matrix[i] {
                vector[j] = i*dim + j
                matrix[i][j] = vector[j]
            }
        }
        fmt.Println(matrix)
    }
}

输出:

[[0 1 2 3 4] [5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]]
[[0 1 2 3 4] [5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]]