Quando tiver variáveis do mesmo tipo, você poderá coletá-las e formar uma matriz. Uma matriz é um tipo de contêiner em que você especifica o tipo dos elementos com []type, como []float. Uma matriz é útil porque dimensiona seu tamanho de acordo com a quantidade de elementos armazenados sem que o código seja alterado para acessar os elementos.
Por exemplo, se você tiver vários jogadores no seu jogo, poderá criar uma matriz e inicializá-la com todos eles.
Players : []player = array{Player1, Player2}O Verse tem o padrão que os espelhos de definição usam. Definir uma matriz e usá-la segue esse padrão.
Comprimento da matriz
Você pode obter a quantidade de elementos em uma matriz ao acessar Length do membro nessa matriz. Por exemplo, array{10, 20, 30}.Length retorna 3.
Como acessar elementos em uma matriz
Os elementos de uma matriz são ordenados na mesma posição da matriz em que foram inseridos, você poderá acessar o elemento nessa posição, chamado de índice, na matriz. Por exemplo, para obter o primeiro jogador, você acessaria a matriz "Players" com Players[0].
O primeiro elemento de uma matriz tem o índice de 0, e o índice de cada elemento seguinte aumenta em número. Por exemplo, array{10, 20, 30}[0] é 10 e array{10, 20, 30}[1] é 20.
Índice | 0 | 1 | 2 |
Elemento | 10 | 20 | 30 |
O último índice de uma matriz é um a menos do que o número do tamanho da matriz. Por exemplo, array{10, 20, 30}.Length é 3, e o índice para 30 em array{10, 20, 30} é 2.
Acessar um elemento em uma matriz é uma expressão falível e só pode ser usado em um contexto de falha, como uma expressão if. Por exemplo:
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}")Esse código mostrará:
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 4Como alterar uma matriz e seus elementos
Matrizes, como todos os outros valores no Verse, são imutáveis. Se você definir uma variável de matriz, será possível atribuir uma nova matriz à variável, ou silenciar elementos individuais.
Por exemplo:
# 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}
Esse código mostrará:
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 7Matrizes multidimensionais
As matrizes nos exemplos anteriores eram unidimensionais, mas você também pode criar matrizes multidimensionais. Matrizes multidimensionais têm outra matriz, ou matrizes, armazenadas em cada índice, semelhantes a colunas e linhas de uma tabela.
Por exemplo, o código a seguir gera uma matriz bidimensional (2D), visualizada na seguinte tabela:
var Counter : int = 0
Example : [][]int =
for (Row := 0..3):
for(Column := 0..2):
set Counter += 1| Coluna 0 | Coluna 1 | Coluna 2 | |
|---|---|---|---|
Linha 0 | 1 | 2 | 3 |
Linha 1 | 4 | 5 | 6 |
Linha 2 | 7 | 8 | 9 |
Linha 3 | 10 | 11 | 12 |
Para acessar os elementos de uma matriz 2D, é preciso usar dois índices. Por exemplo, Example[0][0] é 1, Example[0][1] é 2 e Example[1][0] é 4.
O código a seguir mostra como usar uma expressão for para iterar na 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}]")Esse código mostrará:
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]
A quantidade de colunas em cada linha não precisa ser constante.
Por exemplo, o código a seguir gera uma matriz bidimensional (2D), visualizada na tabela a seguir, na qual a quantidade de colunas em cada linha é maior do que a da anterior:
Example : [][]int =
for (Row := 0..3):
for(Column := 0..Row):
Row * Column| Coluna 0 | Coluna 1 | Coluna 2 | Coluna 3 | |
|---|---|---|---|---|
Linha 0 | 0 | |||
Linha 1 | 0 | 1 | ||
Linha 2 | 0 | 2 | 4 | |
Linha 3 | 0 | 3 | 6 | 9 |
Tipo persistente
Uma matriz é persistente se o tipo de elementos na matriz forem persistentes, ou seja, você pode usá-lo nas variáveis weak_map com escopo de módulo e fazer com que seus valores persistam entre as sessões de jogo. Para obter mais detalhes sobre a persistência em Verse, consulte Como usar dados persistentes em Verse.