gpt4 book ai didi

arrays - 高语 : How to delete an element from a 2D slice?

转载 作者:IT王子 更新时间:2023-10-29 01:02:28 26 4
gpt4 key购买 nike

我最近一直在研究 Go,我想看看从二维 slice 中删除一个元素会怎样。

为了从一维 slice 中删除一个元素,我可以成功地使用:

data = append(data[:i], data[i+1:]...)

但是,对于二维 slice ,使用:

data = append(data[i][:j], data[i][j+1:]...)

抛出错误:

cannot use append(data[i][:j], data[i][j+1:]...) (type []string) as type [][]string in assignment

解决这个问题需要不同的方法吗?

最佳答案

Go 中的 2D slice 只不过是 slice 的 slice 。因此,如果您想从这个 2D slice 中删除一个元素,实际上您仍然只需要从一个 slice 中删除一个元素(这是另一个 slice 的元素)。

没有更多的涉及。唯一需要注意的是,当您从行 slice 中删除元素时,结果将只是“外部” slice 的行(元素)的"new"值,而不是 2D slice 本身.因此,您必须将结果分配给外部 slice 的一个元素,分配给您刚刚删除其元素的行:

// Remove element at the ith row and jth column:
s[i] = append(s[i][:j], s[i][j+1:]...)

请注意,如果我们将 s[i] 替换为 a,这与简单的“从 slice 中删除”相同(不足为奇,因为 s[i ] 表示我们要删除其 jth 元素的“行 slice ”):

a = append(a[:j], a[j+1:]...)

请看这个完整的例子:

s := [][]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
}

fmt.Println(s)

// Delete element s[1][2] (which is 6)
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]]

关于arrays - 高语 : How to delete an element from a 2D slice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34102704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com