• 03/10/2024 4:32 PM

Slices Parte I

porJesus Flores

Sep 2, 2021

Previamente hablamos de los arreglos(arrays) en go, en esta entrada veremos una estructura de datos similar a los arrays pero mas flexible.

Los slices no son mas que una estructura de datos dinámica y extensible con la que podemos implementar y manipular colecciones de datos. A diferencia de los arreglos , los slices pueden crecer y/o reducirse conforme lo necesitemos, son indexados y tienen una longitud, mediante las propiedades de capacidad y longitud.

Crear un Slice Vacio

Para declarar un slice , solo basta con declarar el tipo de de datos que va contener el precedido por corchetes.

var sliceEntero []int
var sliceString []string

como podemos notar no es necesario declarar el tamaño de la estructura.

Crear un slice con la palabra Make

Los slices pueden ser creados usando la palabra reservada make. Cuando utilizamos make, es posible especificar el tamaño del slice, si especificamos solo el tamaño en automático la capacidad será la misma.

var sliceEntero= make([]int, 40)        // el tamaño y la capacidad son los mismos
var sliceString = make([]string, 40, 80) // el tamaño y la capacidad son diferentes

Crear un Slice con valores

Es posible crear un slice y que contenga valores de inicio, la forma de declararlos es sencilla; después del tipo de datos de datos, se indica con llaves los valores que contendrá de inicio.

var sliceEntero = []int{1,2,3,4}
var sliceString = []string{"durant","irving","harden"}

Agregar Elementos

Agregar elementos a los slice es bastante sencillo, solo basta con usar el metodo append().
veamos un ejemplo donde creamos un slice originalmente de tamaño y capacidad 5 y posteriormente usando append incrementa dinámicamente el tamaño.

package main

import "fmt"

func main() {
	//declaramos el slice usando make
	mislice := make([]int, 2, 5)
	//asignamos valores a las posiciones declaradas
	mislice[0] = 1
	mislice[1] = 2
	fmt.Println("valores iniciales de mi slice:", mislice)
	fmt.Printf("tamaño es %d capacidad es %d\n", len(mislice), cap(mislice))

	//usando append podemos agregar nuevos valores al slice,se agregan al final
	mislice = append(mislice, 3, 4, 5, 6)
	fmt.Println("valoes de mi slice despues de usar append:", mislice)
	fmt.Printf("tamaño es %d capacidad es %d\n", len(mislice), cap(mislice))
}

Acceder a los elementos

Acceder a los elementos es sencillo, solo basta con indicar el numero del índice a recuperar.

var sliceEntero = []int{1,2,3,4}
fmt.Println(sliceEntero[0])//imprime el valor en la posición 0

Cambiar el valor de un elemento

Para cambiar el valor de un elemento, basta con indicar el índice del elemento a modificar y asignar el valor.

var sliceString = []string{"durant","irving","harden"}
fmt.Printl(sliceString[0])//imprime "durant"
sliceString[0]  = "griffin"
fmt.Printl(sliceString[0])//imprime el nuevo valor "griffin"

Remover Elemento del Slice

En golang no existe una función propia para remover elementos en los slices pero podemos hacer una implementación de manera sencilla, creando una función que remueva un elemento en base al índice.

package main

import "fmt"

func main() {
	var sliceString = []string{"durant", "irving", "harden", "griffin", "lamarcus"}
	fmt.Println(sliceString)

	sliceString = RemoverPorIndice(sliceString, 3)
	//imprimirá [durant irving harden lamarcus]
	fmt.Println(sliceString)
}

func RemoverPorIndice(s []string, indice int) []string {
	//con esta instrucción indicamos que cortamos el slice hasta
	//un elemento antes del deseado y concantenamos con los elementos
	//siguientes al elemento deseado
	return append(s[:indice], s[indice+1:]...)
}

Continuará…

por Jesus Flores

Ingeniero de Software y Agile Coach

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *