Desenvolvimento - C#
Como funcionam as Arrays (Matrizes) Multidimensionais no C#?
As matrizes, ou como chamamos no C# arrays, multidimensionais são, como muitos professores de faculdade dizem, uma caixa de “Biz”, ou melhor, linha e coluna igual na matemática.
por Adriano Galesso Alves
Bem simples essa resposta. Funciona como esta na imagem acima =).
Ok, não é tão simples. Mas ai está o ponto deste pequeno artigo. As matrizes, ou como chamamos no C# arrays, multidimensionais são, como muitos professores de faculdade dizem, uma caixa de “Biz”, ou melhor, linha e coluna igual na matemática.
E eles estão certos. É isso mesmo. Mas não é como o C# trata isso internamente.
Arrays são Reference Types, traduzindo, variáveis por referência (para quem não sabe, existem 2 tipos, os tipos por referência e os por valor, os Value Types). Os Reference Types guardam, ao invés do valor da variável, o endereço de memória no qual este valor está disponível.
Entendendo isso, vamos a Array. Imaginando a seguinte entrada do programa:
int[,] x = new int[2, 3];
x[1, 2] = 10;
Na primeira linha, criamos uma matriz “x” de inteiros com 2 linhas e 3 colunas. Na realidade, inserimos na memória stack (Pilha) um endereço, podemos ver essa ação na imagem acima (e todas as outras ações também =P). Podemos ver que “x” guarda o endereço de memória “adew:12ws”.
A partir dessa posição de memória podemos entender como o C# se comporta.
Como temos uma array de 2 por 3, vamos ter primeiro neste endereço (“adew:12ws”) outros dois endereços conforme solicitamos na “linha” [2, 3], e esses dois endereços terão as quantidades (três neste caso) de VALORES que solicitamos na "coluna" [2, 3].
Eu disse valores em maiúscula, pois realmente na última instrução da array não teremos mais apontamento para memória e sim o valor real guardado. Esse valor é iniciado zero para todas as 6 possibilidades.
E como funciona a troca de valor, como a segunda linha de instrução diz x[1, 2] = 10? Na imagem podemos ver passo a passo como funciona.
A variável "x", guarda o endereço “adew:12ws” que em 0 guarda o endereço “apop:1234” e em 1 guarda o endereço “eeee:uuuu” (lembrando que as posições da array sempre começam com 0 e terminam em valor - 1). Vamos trocar o valor na linha 1 (“apop:1234” em “adew:12ws”) da coluna 2 (valor 0 em “apop:1234”) para 10 (risca o zero e coloca o 10). Pronto assim o C# trata as arrays multidimensionais.
E se tivéssemos mais uma dimensão?
int[, ,] x = new int[2, 3, 2];
A mesma idéia iria se aplicar, onde "x" apontaria para um endereço de memória (como na pilha vista) com 2 endereços de memória [2, 3, 2]. Esses dois endereços apontariam para mais três endereços de memória [2, 3, 2] e cada um desses endereços de memória teriam 2 valores [2, 3, 2]. Como muita coisa na informática é feita uma árvore de dados.