En el capítulo anterior de slices revisamos las funciones básicas, ahora veremos funcionalidades más avanzadas; empecemos:
Iterar un Slice
Iterar un slice es sencillo, solo basta utilizar el ciclo for combinado con la sentencia range, es posible obtener el índice y el valor del slice , veamos un ejemplo:
package main import "fmt" func main() { var jugadoresNba = []string{"Jordan", "Magic", "Bird", "Lebron"} fmt.Println("\n---------------Ejemplo 1 --------------------\n") //mediante range obtenemo el indice y el elemento for indice, elemento := range jugadoresNba { fmt.Println(indice, "--", elemento) } fmt.Println("\n---------------Ejemplo 2 --------------------\n") //podemos omitir el valor del indice si no lo vamos a ocupar mediante _ for _, valor := range jugadoresNba { fmt.Println(valor) } j := 0 fmt.Println("\n---------------Ejemplo 3 --------------------\n") for range jugadoresNba { //tambien podemos acceder al elemento mediante el índice fmt.Println(jugadoresNba[j]) j++ } }
Copiar un Slice
Para copiar los datos de un slice a otro , basta con utilizar la función copy.
package main import "fmt" func main() { original := []int{4, 3, 2} // el primer slice sera mas pequeño copia := make([]int, 5, 10) // creamos un segundo slice mas grande copy(copia, original) // utilizamos la funcion copy para transferir valores //agregamos nuevos valores al slice copia copia[3] = 1 copia[4] = 0 fmt.Println("Slice copia:", copia) }
Concatenar un Slice a Otro Slice
En el apartado anterior copiamos los valores de un slice a otro, ahora vamos a concatenar los valores de un slice a otro, respetando los valores existentes en el slice destino.
Para esto vamos a usar la función append y los tres puntos suspensivos… , en el ejemplo concatenaremos los valores del slice heroes al slice leyendas:
package main import "fmt" func main() { var heroes = []string{"kobe", "lebron"} var leyendas = []string{"jordan", "magic", "bird"} //de esta manera estamos concatenando el valor de heroes al slice leyendas leyendas = append(leyendas, heroes...) fmt.Println(leyendas) //[jordan magic bird kobe lebron] }
Trucos para manipular Slices
A continuación aprenderemos algunos trucos para manipular y acceder de manera rápida a los datos de los slices , aprovechando la velocidad que brinda golang:
package main import "fmt" func main() { var jugadores = []string{"jordan", "magic", "bird", "kobe", "lebron"} //imprimimos todos los valores del slice fmt.Printf("Jugadores Nba: %v\n", jugadores) //si dejamos vacia la parte izquierda toma desde el indice 0 //hasta el elemento no el índice numero 3 //[magic bird kobe] fmt.Printf(":3 %v\n", jugadores[:3]) //de esta manera el valor de la izquierda representa el indice // y el de la derecha el numero de elemento //[magic bird kobe] fmt.Printf("1:4 %v\n", jugadores[1:4]) //de esta manera en la izquierda empieza a contar en el indice 2 // hasta el ultimo elemento //[bird kobe lebron] fmt.Printf("2: %v\n", jugadores[2:]) //ahora veamos las manera de recuperar todos los elementos //[jordan magic bird kobe lebron] //dejando vacios los valores de izquierda y derecha obtenemos todos los elementos fmt.Println(jugadores[:]) //indicando el indice 0 en la izquierda y dejando vacio la parte de la derecha fmt.Println(jugadores[0:]) //indicando en la izquierda el indice 0 y en la derecha el tamaño del slice fmt.Println(jugadores[0:len(jugadores)]) }
Ahora que hemos aprendido el tratamiento de slices, te invito a realizar un pequeño reto:
Escriba una rutina que permita validar si existe un elemento en un slice.