Cómo borrar un elemento de una rebanada en el Golang
En Go, slice es un array de tamaño variable que tiene indexación a partir del array pero su tamaño no es fijo ya que puede ser redimensionado. Cualquier elemento de una rebanada puede ser eliminado de la rebanada debido a su naturaleza dinámica. Borrar un elemento de una rebanada es bastante diferente de otros lenguajes debido a la ausencia de funciones incorporadas en Go a borrar un elemento de una rebanada.
Crear subcortes de una slice dada
Antes de sumergirnos en la eliminación de un elemento de un trozo, veremos la creación de un subtramo de un trozo dado, ya que es uno de los principales componentes para eliminar un elemento de un trozo.
package main
import "fmt"
func main() {
var Slice1 = []int{1, 2, 3, 4}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := Slice1[:2]
fmt.Printf("slice2: %v\n", Slice2)
}
Producción :
slice1: [1 2 3 4]
slice2: [1 2]
Aquí, la rebanada 2 es una sub-rebanada formada por la rebanada 1 que contiene todos los elementos desde el principio, es decir, desde el índice 0 hasta el índice 2-1, es decir, 1. Note aquí que la indexación de la rebanada en Go comienza desde 0.
package main
import "fmt"
func main() {
var Slice1 = []int{1, 2, 3, 4}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := Slice1[2:]
fmt.Printf("slice2: %v\n", Slice2)
}
Producción :
slice1: [1 2 3 4]
slice2: [3 4]
Aquí, slice2 es una subcategoría formada por slice1 que contiene todos los elementos desde el índice 2 hasta el final de la slice.
Borrar elementos de la slice en Go
La tarea de eliminar elementos de rebanada puede realizarse con diferentes enfoques basados en nuestros requerimientos. Las diversas formas de eliminar un elemento de slice se discuten a continuación:
Cuando el orden es importante
Si deseamos mantener el orden de los cortes después de eliminar el elemento, desplazamos la posición de todos los elementos a la derecha de los elementos eliminados hacia la izquierda por uno.
package main
import "fmt"
func remove(slice []int, s int) []int {
return append(slice[:s], slice[s+1:]...)
}
func main() {
var Slice1 = []int{1, 2, 3, 4, 5}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := remove(Slice1, 2)
fmt.Printf("slice2: %v\n", Slice2)
}
Producción :
slice1: [1 2 3 4 5]
slice2: [1 2 4 5]
Aquí se forma la rebanada 2 después de quitar el elemento en el índice 2 de la rebanada 1.
Cuando el orden no es importante
package main
import "fmt"
func remove(s []int, i int) []int {
s[i] = s[len(s)-1]
return s[:len(s)-1]
}
func main() {
var Slice1 = []int{1, 2, 3, 4, 5}
fmt.Printf("slice1: %v\n", Slice1)
Slice2 := remove(Slice1, 2)
fmt.Printf("slice2: %v\n", Slice2)
}
Producción :
slice1: [1 2 3 4 5]
slice2: [1 2 5 4]
Aquí se forma la rebanada 2 después de quitar el elemento del índice 2 de la rebanada 1, pero el orden de los elementos no se conserva aquí. Es más rápido que el método anterior.
Así que, cuando el orden tiene una mayor prioridad que la velocidad, usamos el primer método y si la velocidad tiene una mayor prioridad que el orden, usamos el segundo método para eliminar un elemento de una rebanada.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn