示例

如果您需要从一个切片中删除一个或多个元素,或者需要使用另一个现有切片的子切片,请执行以下操作:您可以使用以下方法。

以下示例使用int的slice,但适用于所有类型的slice。

因此,我们需要一个切片,从女巫中我们将删除一些元素:

slice := []int{1, 2, 3, 4, 5, 6} 
// > [1 2 3 4 5 6]

我们还需要删除元素的索引:

// 要删除的第一个元素的索引(对应于切片中的“ 3”)
var first = 2

// 要删除的最后一个元素的索引(对应于切片中的“ 5”)
var last = 4

这样我们就可以“切片”切片,删除不想要的元素:

// 保持元素从开始到“要删除的第一个元素”(不保持要删除的第一个元素), 
// 从“要删除的第一个元素”删除元素到“要删除的最后一个元素”
// 并将所有其他元素保留在切片的末尾
newSlice1 := append(slice[:first], slice[last+1:]...)
// > [1 2 6]

// 您可以直接使用数字而不是变量
newSlice2 := append(slice[:2], slice[5:]...)
// > [1 2 6]

// 另一种做同样的方法
newSlice3 := slice[:first + copy(slice[first:], slice[last+1:])]
// > [1 2 6]

// 与具有硬编码索引的newSlice3相同(不使用变量)
newSlice4 := slice[:2 + copy(slice[2:], slice[5:])]
// > [1 2 6]

要仅删除一个元素,只需将该元素的索引作为要删除的第一个AND作为最后一个索引,就像这样:

var indexToRemove = 3
newSlice5 := append(slice[:indexToRemove], slice[indexToRemove+1:]...)
// > [1 2 3 5 6]

// 硬编码版本:
newSlice5 := append(slice[:3], slice[4:]...)
// > [1 2 3 5 6]

您还可以从切片的开头删除元素:

newSlice6 := append(slice[:0], slice[last+1:]...)
// > [6]

// 可以简化为
newSlice6 := slice[last+1:]
// > [6]

您还可以从切片末尾删除一些元素:

newSlice7 := append(slice[:first], slice[first+1:len(slice)-1]...)
// > [1 2]

// 可以简化为
newSlice7 := slice[:first]
// > [1 2]

如果新切片必须包含与第一个完全相同的元素,则可以使用相同的元素,但要使用last := first-1。
(这在先前计算索引的情况下很有用)