golang slice 二维

发布时间:2024-07-04 23:49:17

在golang中,slice是一种非常灵活的数据结构。它是一种动态数组,可以根据需要自动扩容或缩小。与传统的静态数组相比,slice的长度和容量可以动态变化,使得它在处理动态数据集合时非常方便。

1. 二维slice的定义和初始化

要定义一个二维slice,我们可以使用make函数来创建,指定其行数和列数:

matrix := make([][]int, rows)
for i := range matrix {
    matrix[i] = make([]int, cols)
}

上述代码中,我们首先使用make函数创建了一个外部的slice,然后使用range关键字遍历每一行,再为每一行创建对应的内部slice。这样就完成了二维slice的初始化。

2. 二维slice的访问和修改

二维slice的访问和修改方式与一维slice类似,只是需要使用两个索引来指定行和列:

value := matrix[row][col]
matrix[row][col] = newValue

我们可以通过双重循环来遍历整个二维slice:

for i := 0; i < rows; i++ {
    for j := 0; j < cols; j++ {
        fmt.Print(matrix[i][j], " ")
    }
    fmt.Println()
}

上述代码中,外层循环控制行,内层循环控制列,通过matrix[i][j]可以访问到每个元素的值。

3. 二维slice的扩容和缩小

与一维slice类似,二维slice也支持自动扩容和缩小。当我们向二维slice中添加数据时,如果超过了其容量,slice会自动进行扩容:

matrix = append(matrix, []int{1, 2, 3})

上述代码中,我们使用append函数向matrix中添加一行数据。如果matrix的容量不足,append函数会创建一个新的底层数组,并将原有数据复制到新的数组中,然后再追加新的数据。

类似地,当我们从二维slice中删除数据时,如果删除后的长度小于容量的四分之一,slice会自动进行缩小操作:

matrix = matrix[:len(matrix)-1]

上述代码中,我们使用切片操作删除了matrix的最后一行数据。如果删除后的长度低于原来容量的四分之一,slice会创建一个新的底层数组,并将原有数据复制到新的数组中,然后再进行删除操作。

通过对golang中二维slice的定义、初始化、访问和修改以及扩容和缩小等方面的学习,我们可以充分利用slice的灵活性来处理复杂的数据集合。掌握了这些技巧,相信您能更加高效地开发出优质的golang应用程序。

相关推荐