如何解决如何从 Golang 中的 Slice 中删除元素

如果要保持数组有序,则必须将删除索引右侧的所有元素向左移动一位。希望这可以在 Golang 中轻松完成:

func remove(slice []int, s int) []int {
    return append(slice[:s], slice[s+1:]...)
}

但是,这是低效的,因为您最终可能会移动所有元素,这是昂贵的。

如果您不关心排序,则可以更快地将要删除的元素替换为切片末尾的元素,然后返回 n-1 个第一个元素:

func remove(s []int, i int) []int {
    s[i] = s[len(s)-1]
    return s[:len(s)-1]
}

使用重新切片方法,清空 1 000 000 个元素的数组需要 224 秒,而这个只需要 0.06 ns。

len(s)

切片和数组是 0 索引的,删除数组的第 n 个元素意味着提供输入。要删除第一个元素,请调用,要删除第二个元素,请调用,依此类推。

解决方法