我希望数据结构(数组或切片)看起来像这样:
[[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]
}
答案 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]]