在Go语言中,2D切片只是一个切片的切片。因此,如果你想从这个2D切片中删除一个元素,实际上你仍然只需要从一个切片(另一个切片的元素)中删除一个元素。
没有更多的步骤。唯一要注意的是,当从行切片中删除一个元素时,结果只会是“外部”切片的行(一个元素)的“新”值,而不是2D切片本身。所以你必须将结果分配给外部切片的一个元素,即刚刚删除其元素的行:
// Remove element at the ith row and jth column:
s[i] = append(s[i][:j], s[i][j+1:]...)
请注意,如果我们用a
替换s[i]
,则这与简单的“从切片中删除”操作相同(这并不奇怪,因为s[i]
表示要删除其第j
个元素的“行切片”):
a = append(a[:j], a[j+1:]...)
请查看这个完整的例子:
s := [][]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
}
fmt.Println(s)
i, j := 1, 2
s[i] = append(s[i][:j], s[i][j+1:]...)
fmt.Println(s)
输出结果(在Go Playground中尝试):
[[0 1 2 3] [4 5 6 7] [8 9 10 11]]
[[0 1 2 3] [4 5 7] [8 9 10 11]]