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. Una matriz es útil porque se adapta al número de elementos que se almacenan en la misma sin cambiar el código de acceso a los elementos.
Por ejemplo, si tienes varios jugadores en tu partida, puedes crear una matriz e inicializarla con todos los jugadores.
Players : []player = array{Player1, Player2}Verse sigue un patrón por el cual la definición imita al uso. El acto de definir una matriz y usarla sigue dicho patrón.
Longitud de la matriz
Puedes obtener el número de elementos de una matriz accediendo al miembro Length de la matriz. Por ejemplo, array{10, 20, 30}.Length devuelve 3.
Cómo acceder a los elementos de una matriz
Los elementos de una matriz se ordenan en la misma posición en la matriz en la que los has insertado, y puedes acceder al elemento en esa posición, denominada su índice, en la matriz. Por ejemplo, para obtener el primer jugador, accederías a la matriz `Players` con Players[0].
El primer elemento de una matriz 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 una matriz es uno menos que la longitud de la misma. 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 devolverá el siguiente resultado:
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, al igual que el resto de valores en Verse, son inmutables. Si defines una variable de matriz, te permitirá asignar una nueva matriz 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 devolverá el siguiente resultado:
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. Las matrices multidimensionales tienen otra matriz, o matrices, almacenadas en cada índice, de forma similar a las columnas y filas de una tabla.
Por ejemplo, el siguiente código produce una matriz bidimensional (2D), mostrada 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 una matriz 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 devolverá el siguiente resultado:
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 una matriz bidimensional (2D), mostrada 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 elementos de la matriz son persistentes, lo que significa que puedes usarlos en las variables weak_map de tu ámbito de módulo y hacer que sus valores se mantengan a lo largo de la sesión de juego. Para obtener más información sobre la persistencia en Verse, consulta la sección Cómo utilizar datos persistentes en Verse.