Cuando tienes variables del mismo tipo, puedes reunirlas en una matriz. Una matriz es un tipo de contenedor donde se especifica el tipo de los elementos con []type, como []float. Un array es útil porque se adapta al número de elementos que se almacenan allí sin cambiar el código de acceso a los elementos.
Por ejemplo, si tienes varios jugadores en tu juego, puedes crear una matriz e inicializarla con todos los jugadores.
Players : []player = array{Player1, Player2}Verse sigue el patrón en el que la definición refleja el uso. Definir una matriz y utilizarla sigue ese patrón.
Longitud de la matriz
Puedes obtener el número de elementos de una matriz si accedes al miembro Length de la matriz. Por ejemplo, array{10, 20, 30}.Length devuelve 3.
Cómo acceder a los elementos en una matriz
Los elementos de una matriz se ordenan en la misma posición en la matriz en la que los insertaste, y puedes acceder al elemento en esa posición, lo que se denomina su índice en la matriz. Por ejemplo, para obtener el primer jugador, accederías a la matriz de jugadores con Players[0].
El primer elemento de un array tiene un índice 0, y el índice de cada elemento posterior aumenta en número. Por ejemplo, array{10, 20, 30}[0] es 10 y array{10, 20, 30}[1] es 20.
Índice | 0 | 1 | 2 |
Elemento | 10 | 20 | 30 |
El último índice de un array es uno menos que la longitud de dicho array. Por ejemplo, array{10, 20, 30}.Length es 3, y el índice para 30 en array{10, 20, 30} es 2.
Acceder a un elemento de una matriz es una expresión falible y solo puede utilizarse en un contexto de fallo, como una expresión if. Por ejemplo:
ExampleArray : []int = array{10, 20, 30, 40, 50}
for (Index := 0..ExampleArray.Length - 1):
if (Element := ExampleArray[Index]):
Print("{Element} in ExampleArray at index {Index}")Este código imprimirá lo siguiente:
10 in ExampleArray at index 0
20 in ExampleArray at index 1
30 in ExampleArray at index 2
40 in ExampleArray at index 3
50 in ExampleArray at index 4Cómo cambiar una matriz y sus elementos
Las matrices, como todos los demás valores en Verse, son inmutables. Al definir una variable de array, podrás asignar una nuevo array a la variable, o mutar elementos individuales.
Por ejemplo:
# Array1 is an array of integers
Array1 : []int = array{10, 11, 12}
# Array2 is an array variable of integers
var Array2 : []int = array{20, 21, 22}
# we concatenate Array1, Array2, and a new array of integers
# and assign that to the Array2 variable
set Array2 = Array1 + Array2 + array{30, 31}
Este código imprimirá lo siguiente:
10 at index 0
77 at index 1
12 at index 2
20 at index 3
21 at index 4
22 at index 5
30 at index 6
31 at index 7Matrices multidimensionales
Las matrices de los ejemplos anteriores eran todas unidimensionales, pero también se pueden crear matrices multidimensionales. Los arrays multidimensionales incluyen otro array, o arrays, almacenadas en cada índice, de forma similar a las columnas y filas de una tabla.
Por ejemplo, el siguiente código produce un array bidimensional (2D), que se visualiza en la siguiente tabla:
var Counter : int = 0
Example : [][]int =
for (Row := 0..3):
for(Column := 0..2):
set Counter += 1| Columna 0 | Columna 1 | Columna 2 | |
|---|---|---|---|
Fila 0 | 1 | 2 | 3 |
Fila 1 | 4 | 5 | 6 |
Fila 2 | 7 | 8 | 9 |
Fila 3 | 10 | 11 | 12 |
Para acceder a los elementos de un array 2D, hay que utilizar dos índices. Por ejemplo, Example[0][0] es 1, Example[0][1] es 2, y Example[1][0] es 4.
El siguiente código muestra cómo utilizar una expresión for para iterar a través de la matriz 2D Example.
if (NumberOfColumns : int = Example[0].Length):
for(Row := 0..Example.Length-1, Column := 0..NumberOfColumns):
if (Element := Example[Row][Column]):
Print("{Element} at index [{Row}][{Column}]")Este código imprimirá lo siguiente:
1 at index [0][0]
2 at index [0][1]
3 at index [0][2]
4 at index [1][0]
5 at index [1][1]
6 at index [1][2]
7 at index [2][0]
8 at index [2][1]
9 at index [2][2]
10 at index [3][0]
No es necesario que el número de columnas de cada fila sea constante.
Por ejemplo, el siguiente código produce un array bidimensional (2D), que se visualiza en la siguiente tabla, donde el número de columnas en cada fila es mayor que la fila anterior:
Example : [][]int =
for (Row := 0..3):
for(Column := 0..Row):
Row * Column| Columna 0 | Columna 1 | Columna 2 | Columna 3 | |
|---|---|---|---|---|
Fila 0 | 0 | |||
Fila 1 | 0 | 1 | ||
Fila 2 | 0 | 2 | 4 | |
Fila 3 | 0 | 3 | 6 | 9 |
Tipo persistente
Una matriz es persistente si el tipo de los elementos en la matriz es persistente, lo que significa que puedes usarlos en tus variables weak_map del módulo y hacer que sus valores persistan a lo largo de las sesiones de juego. Para obtener más información sobre la persistencia en Verse, consulta Cómo usar datos persistentes en Verse.