如果您需要从一个切片中删除一个或多个元素,或者需要使用另一个现有切片的子切片,请执行以下操作:您可以使用以下方法。
以下示例使用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。
(这在先前计算索引的情况下很有用)