Explorando el Poder de Go 1.21: Slices Package

Explorando el Poder de Go 1.21: Slices Package

¿Ya conoces el poder de Go 1.21? En esta nota exploraremos las mejoras que este nuevo paquete ofrece, asegurando un mejor rendimiento para tus aplicaciones en Go. Te contaremos sobre package slices, con el cual podemos realizar diversas operaciones en los slice en Go.

El primer paso es importar el package slices. (Importaremos el package fmt para mostrar los ejemplos).

Vamos a ver estos métodos a continuación:

  • Binary Search
  • Compact
  • Compare
  • Contains
  • Clone
  • Equals
  • Index
  • Insert
  • IsSorted
  • Max & Min
  • Remove
  • Reverse
  • Replace
  • Sort

Algunos métodos tienen funcionalidad de Function, con esto podemos usar comparaciones personalizadas.


Podemos realizar una búsqueda binaria con este método para encontrar algún valor en nuestro slice.

Nuestros slices deben estar ordenados para realizar esta operación.

Por ejemplo:


Output:


Compact

Este método reemplaza ejecuciones consecutivas de elementos iguales con una sola copia.

Nuestros slices deben estar ordenados para realizar esta operación.

Por ejemplo:

Output:


Compare

Podemos comparar 2 slices. El resultado es:

  • 0 si s1 == s2
  • -1 si s1 < s2
  • +1 si s1 > s2

Por ejemplo:

Output:


Contains

Podemos usar este método para verificar si algún valor existe en el slice.

Por ejemplo:

Output:


Clone

Podemos usar este método para clonar un slice.

Por ejemplo:


Output:


Equals

Podemos usar este método para determinar si dos slices son iguales: deben tener la misma longitud, y todos los elementos deben ser iguales.

Si las longitudes son diferentes, el método devolverá false.

De lo contrario, los elementos se comparan en orden de índice creciente, y la comparación se detiene en el primer par desigual.

Por ejemplo:

Output:


Index

Este método devuelve el índice de la primera ocurrencia del valor en nuestro slice, o -1 si no está presente.

Por ejemplo:

Output:


Insert

Podemos usar este método para insertar un rango de valores en un índice específico y devolver el slice modificado.

Por ejemplo:

Output:


IsSorted

Podemos usar este método para verificar si nuestro slice está ordenado en orden ascendente.

Por ejemplo:

Output:


Max & Min

Podemos usar los métodos Max y Min para obtener los valores máximo y mínimo del slice.

Por ejemplo:

Output:


Remove

Podemos usar este método para eliminar un rango de nuestro slice, y el método devolverá el nuevo slice.

Por ejemplo:

Output:


Reverse

Podemos usar este método para invertir los elementos de nuestro slice.

Por ejemplo:


Output:


Replace

Podemos usar este método para reemplazar un rango de elementos. Para realizar esta operación, necesitamos definir el valor de 'i' (inicio), el valor de 'j' (fin) y los valores que se agregarán.

Genera un error si mySlice[from:to] no es un slice válido.

Por ejemplo, vamos a usar el slice:

Vamos a reemplazar los valores desde el índice 3 hasta el índice 6 con otros valores. No es necesario que estos otros valores tengan la misma longitud que el rango (índice 3 hasta el índice 6).

Output:

Podemos agregar los mismos 3 valores solo reemplazando 1 valor.

Output:

O ningún valor

Output:


Sort

Podemos usar este método para ordenar los elementos de nuestro slice.

Por ejemplo:

Output:


Function

Algunos métodos tienen una funcionalidad de 'Función' con la que podemos usar una comparación personalizada. Estos métodos son:

MethodFunction Method
BinarySearchBinarySearchFunc
CompactCompactFunc
CompareCompareFunc
ContainsContainsFunc
DeleteDeleteFunc
EqualEqualFunc
IndexIndexFunc
IsSortedIsSortedFunc
MaxMaxFunc
MinMinFunc
SortSortFunc

Vamos a realizar el siguiente ejemplo con el método Equal (método Function), comparando un slice de enteros con un slice de cadenas.

Hemos definido los valores para la comparación y la función.

Output:



De todas estas formas puedes manipular eficientemente tus slices. Recuerda que para obtener más información, puedes visitar el sitio oficial de Go: https://pkg.go.dev/slices@master

Recurso: https://github.com/digitalhouse-tech/blog-go-v21-slices