DMarlon Studio

Lección 9 · 9 de 20

Arrays · Go

Guarde varios valores del mismo tipo en un array de Go: tamaño fijo, índices, len, recorrido con for, copia al asignar y comparación con ==.

Go · Arrays en DMarlon Studio: el código del ejemplo y su salida en la terminal

Un array guarda un número fijo de valores del mismo tipo. var rainfall [7]float64 reserva siete números, uno por día, y todos empiezan en su valor cero, 0. La longitud forma parte del tipo: [7]float64 y [8]float64 son tipos distintos.

Cada elemento se alcanza por su índice, que empieza en 0: rainfall[3] = 11 es el cuarto día, el jueves. fmt.Println escribe el array entero entre corchetes. En un literal, [...] deja que Go cuente los elementos: days tiene 7, como dice len(days).

El for clásico recorre los índices de 0 a len(rainfall)-1: suma la lluvia en total y guarda en wettest el índice del día más lluvioso. Como days sigue el mismo orden, days[wettest] da su nombre: Thu.

Asignar un array lo copia entero: backup := rainfall crea otro array, y cambiar backup[0] no toca el original. Por eso == da false: dos arrays del mismo tipo se pueden comparar, y son iguales solo si lo son todos sus elementos. En la práctica se usan más los slices, de la lección siguiente, que pueden crecer.

Código · main.go

package mainimport "fmt"func main() {	// An array has a fixed length, and it is part of its type.	var rainfall [7]float64	rainfall[0] = 2.5	rainfall[3] = 11	rainfall[6] = 4.25	fmt.Println("Rainfall:", rainfall)	// [...] lets Go count the elements of the literal.	days := [...]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}	fmt.Println("Days in a week:", len(days))	total, wettest := 0.0, 0	for i := 0; i < len(rainfall); i++ {		total += rainfall[i]		if rainfall[i] > rainfall[wettest] {			wettest = i		}	}	fmt.Printf("Total: %.2f mm\n", total)	fmt.Println("Wettest day:", days[wettest])	// Assigning an array copies all of it.	backup := rainfall	backup[0] = 99	fmt.Println("Monday:", rainfall[0], "in the copy:", backup[0])	// Arrays of the same type can be compared with ==.	fmt.Println("Same data?", backup == rainfall)}

Salida · go run main.go

Rainfall: [2.5 0 0 11 0 0 4.25]
Days in a week: 7
Total: 17.75 mm
Wettest day: Thu
Monday: 2.5 in the copy: 99
Same data? false

Para recordar

  • [n]tipo es un array de n elementos; n no cambia.
  • Los índices van de 0 a len(a)-1.
  • [...] cuenta los elementos del literal.
  • Asignar un array copia todos sus elementos.
  • Dos arrays del mismo tipo se comparan con ==.

Ejercicio

Añada un array [7]float64 con las temperaturas de la semana y escriba la media y el día más frío, con su nombre sacado de days.