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.

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 *