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