VB.NET - Apresentando Arrays
Um array (matriz) é uma lista de valores onde todos os valores no grupo são referenciados pelo nome da matriz e o índice atribuído ao valor específico na matriz. Um valor individual de um array é chamado elemento. Os arrays são criados na memória do computador e por isto possui um bom desempenho no seu tratamento.
Cada elemento possui um número relacionado que é utilizado como índice da matriz. A referência usa o nome da matriz e o número entre parênteses. Assim:
NomedoVetor(NúmeroDoElemento) - Ex: Vetor(1) - refere-se ao elemento que possui o índice 1.
Em VB.NET todos os arrays são indexados a partir de zero. Logo temos :
Quantidade(0) - refere-se ao primeiro elemento
Quantidade(3) - refere-se ao quarto elemento
Nota : No VB.NET não existe mais "option base" que você podia usar para alterar o valor do índice inicial de um array.
Existem mais de uma maneira de declarar um vetor unidimensional em VB.NET. Abaixo alguns exemplos
Dim Vetor(4) As Integer | Define um array com 5 elementos iniciados com zero |
Dim Vetor As Integer = new Integer(4) {} | Define um array com 5 elementos iniciados com zero |
Dim Vetor() As Integer = {1, 2, 3, 4, 5} | Define um array com 5 elementos e atribui valores a cada elemento |
Dim Vetor As Integer = new Integer(4) { 0, 1, 2, 3, 4} | Define um array com 5 elementos e atribui valores a cada elemento |
Redim Vetor(10) | Redimensiona o array Vetor para 11 elementos |
ReDim Preserve Vetor(10) | Redimensiona o array Vetor para 11 elementos |
Nota: Redim somente pode ser usado a nível de procedure. Não pode ser usado em módulo ou classe.
A utilização de arrays é muito importante e facilita em muito o trabalho de programação. Usando arrays podemos facilmente armazenar e exibir dados em tabelas usando um laço FOR/NEXT.
A matriz abaixo tem o nome de Estados e armazenas 5 nomes de estados brasileiros:
Elemento | Nome |
Para listar os nomes dos estados armazenados
no array acima podemos usar o código : For i = 0 to 4 Debug.WriteLine(Estados(i)) Next i |
0 | São Paulo | |
1 | Rio de Janeiro | |
2 | Belo Horizonte | |
3 | Brasília | |
4 | Porto Alegre |
Para criar um array na memória precisamos declarar o array como fazemos com qualquer outra variável. Geralmente usamos a declaração Dim para declarar um array que é tem visibilidade local. Podemos usar os modificadores Private, Public e Friend e alterar o nível de escopo de visibilidade do array.
Quando um array é declarado é alocado um espaço de armazenamento na memória e os elementos são iniciados. Elementos numéricos são iniciados para zero e um array de elementos strings (alfanuméricos) são iniciados para uma string vazia.
Exemplo:
Dim strNomes(25) As String | Declara um array do tipo String com 26 elementos |
Private Quantidade(10) As Integer | Declara um array do tipo Integer com 11 elementos |
Você pode também declarar arrays e atribuir valores para os elementos. Assim :
Public Materias() As String = {"Matematica" , "Geografia" , "Física" , "Química" , "Inglês" } |
Nesta declaração estou criando um array do tipo String com 5 elementos . Os valores de cada elemento são incluídos entre Colchetes. Embora não tenhamos referenciado o número de cada elemento, temos que Materias(0) refere-se a Matemática , e assim por diante. |
Se tentarmos acessar um elemento usando um número que não esta atribuído a nenhum elemento iremos obter um erro. No exemplo acima se tentarmos acessar um suposto elemento com índice 6 : Materias(6) iremos obter a seguinte mensagem de erro :
An unhandled exception of type 'System.IndexOutOfRangeException' occured in ...
Os arrays são processados usando laços (loops) e o laço FOR/NEXT , como já foi dito anteriormente pode ser usado com este intuito. Além do laço FOR/NEXT o VB .NET fornece o laço - For Each/Next. A vantagem do deste laço é que você não precisa manipular o índice.
Embora o loop For Each...Next seja similar o loop For...Next ele executa um bloco de declaração para cada elemento na coleção ao invés de especificar um número de vezes. A sintaxe é :
For Each elemento In coleção ' executa o bloco para cada elemento de elemento. Next [ elemento ]
No exemplo abaixo serão exibidos no console o nome de cada matéria do array.
Module Module1
Sub Main()
Dim Materias()
As
String = {"Matematica",
"Geografia", "Física", "Química", "Inglês"}
Dim nome
As
String Console.WriteLine(nome)
Next Console.ReadLine()
End Module |
Para iniciar todos os elementos de um array com um valor podemos fazer como no código abaixo onde atribuímos o valor zero a todos os elementos do array Quantidade.
Module Module1
Sub Main()
Dim Quatidade(25) As Integer
Dim i as integer i = 0
Next i End Sub End Module |
Os arrays possuem algumas características avançadas no VB.NET:
Você pode atribuir o conteúdo de um array a outro arrary
Você pode criar funções que aceitam o retorno de um array
Você pode criar propriedades que aceitam o retorno de um array
A seguir irei relacionar as principais propriedades e métodos da classe array . Sua utilização permite um tratamento avançado e eficaz.
Propriedades
IsFixedSize | Indica se o array tem um tamanho fixo. |
IsReadOnly | Indica se o array é somente leitura(read-only) |
IsSynchronized | Indica se o acesso ao array é sincronizado (thread-safe). |
Length | Obtem o total de elementos em todas as dimensões do array. |
Rank | Obtem o número de dimensões do array. |
SyncRoot | Obtem um objeto que pode ser usado para sincronizar o acesso ao array. |
Clear | Define o intervalo dos elementos de um array para zero, para false ou para null. |
Clone | Cria uma copia do array. |
Copy | Copia a seção de um array para outro array e realiza o casting e o boxing requerido |
CopyTo | Copia todos os elementos de array de uma dimensão para outro array. |
CreateInstance | Inicializa uma nova instância da classe array. |
Equals (herdado de Object) | Determina se duas instâncias de objetos são iguais. |
GetLength | Obtém o numero de elementos de uma dimensão especificada de um array. |
GetLowerBound | Obtémo menor indice inferior da dimensão especificada em um array |
GetType (herdado de Object) | Obtémo tipo da instância atual |
GetUpperBound (Equivale ao UBound do VB6) | Obtémo indice superior da dimensão especificada em um array |
GetValue | Obtém o valor de um elemento definido no array. |
IndexOf | Retorna o indice da primeira ocorrência de um valor em um array de uma dimensão. |
Initialize | Inicia cada elemento de um array chamando o construtor padrão. |
Reverse | Reverte a ordem dos elementos de um array de uma dimensão. |
SetValue | Define o elemento especificado em um array para um valor definido. |
Sort | Ordena os elementos de um array de uma dimensão. |
ToString (inherited from Object) | Retorna uma string que representa o objeto atual. |
Podemos comparar um array com a palavra-chave nothing para ter certeza de que o array não esta inicializado. O código é o seguinte:
Dim Vetor() as Integer |
Vejamos a seguir um exemplo de utilização de arrays para armazenar valores em um programa VB .NET.
1-) Inicie um novo projeto no VB.NET do tipo Windows Application e no formulário padrão insira os controles :
GroupBox , Label , TextBox , Button e ListBox
conforme figura abaixo:
Ao lado temos o formulário
onde o usuário vai informar o número da equipe e o valor da venda. Estamos armazenando os valores no array mdecTotalVendas cuja representação gráfica esta representada na figura. Ao clicar no botão Exibir os valores serão exibidos no listbox - lstRelacao. O bloco Try/Catch verifica se um número entre 1 e 5 foi informado para a equipe e se o valor das vendas também foi informado. |
2-) O código do formulário é o seguinte :
Public Class Form1
Inherits System.Windows.Forms.Form Dim mdecTotalVendas(5) As Decimal Private Sub cmdOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOK.Click
Try
decVendas = CDec(txtVendas.Text)
Else
End If Catch
End
Try Private Sub cmdExibir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExibir.Click
'exibe os
elementos do array no listbox lstRelacao.Items.Add("Equipe : " & CStr(intEquipe) & " - " & FormatCurrency(mdecTotalVendas(intEquipe)))
Next End Class |
3-) O resultado após você informar um valor e clicar no botão Exibir pode ser como mostrado abaixo:
Com este exemplo espero ter deixado claro como um array de uma dimensão é declarado e utilizado. E por falar em uma dimensão vamos falar agora de arrays com mais de uma dimensão.
Arrays Multidimensionais
Um array com mais de uma dimensão pode ser representado por uma matriz com linhas e colunas. Abaixo temos uma figura que representa uma matriz do tipo 3 por 3 ; três linhas e 3 colunas. A declaração de um array com mais de uma dimensão
100 | 200 | 300 |
250 | 180 | 140 |
160 | 80 | 135 |
Podemos usar um array com duas dimensões para representar a matriz acima. A declaração do array seria feita da seguinte forma:
Dim Vetor(2,2) para atribuir os valores para o array podemos fazer:
Dim values(,) As Integer = { {100, 200, 300}, {250, 180, 140} , {160, 80, 135}}
Da mesma forma podemos fazer :
Dim values1(9, 9) As Integer | Declara um array com 100 elementos | ||||||||||||
Dim values2(,) As Integer | Declara um array sem limites | ||||||||||||
ReDim values2(9, 9) | Define o tamanho do array | ||||||||||||
Dim values(,) As Integer = { {1, 2, 3}, {4, 5, 6}} |
Declarando
um array com duas dimensões de seis elementos (indice(0,0) até indice(1,2) A representação de sua matriz seria:
|
||||||||||||
Dim values(,)
As Integer = { _ {{1, 2, 3}, _ {4, 5, 6}}, _ {{7, 8, 9}, _ {10, 11, 12}} _ } |
Declara um array com três dimensões com 12 elementos : outra forma de ver o vetor seria: Dim values(,) As Integer = { {{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9}, {10, 11, 12}}} A matriz que representaria o array é:
|
||||||||||||
Dim Vetor(,,,) |
Declara um array de quatro dimensões | ||||||||||||
Dim Vetor(3,3,3,3) |
Declara um array de quatro dimensões |
Abaixo temos a declaração de um array de três dimensões ;em seguida usamos a declaração Redim para declarar o tamanho do array e em seguida atribuímos valores elementos do array usando laços For/Next:
Nota: Redim não pode mudar dinamicamente o número de dimensões de um array.
Dim Vetor( , , ) as Integer ReDim Vetor(5,5,5) For x = 0 to 4 |
Vou mostrar agora um exemplo de como podemos usar trabalhar com um array de mais de uma dimensão.
Vamos supor que você tenha uma tabela com os dados das vendas de produtos e que você gerou um array com duas dimensões de 2000 por 10.(Temos 2000 produtos e 10 regiões). Vou chamar este array de Produtos e a declaração para criar este vetor poderia ser feita assim:
Dim Produtos(2000,10) As Long
O array contém o número de produtos vendidos ( uma linha para cada produto) por região (uma coluna por região).
Cada elemento do array - Produtos - irá representar a quantidade vendida do produto para uma região definida.
Nosso objetivo será calcular o Total de cada produto vendidos para todas as regiões e o total de produtos vendidos por região.
Para armazenar o valor total de produtos vendidos para todas as regiões eu vou criar o array - TotalProdutoRegiao . Cada elemento deste array conterá a soma de cada produto para todas as 10 regiões.A declaração do array é feita assim:
Dim lng TotalProdutoRegiao(2000) As Long
Para armazenar o total de vendas de todos os produtos para cada região criarei o array - TotalProdutosPorRegiao . Cada elemento deste array conterá a soma de todos os produtos vendidos para uma região.A declaração do array é feita assim:
Dim TotalProdutosPorRegiao(10) As Long
A matriz que representará o array pode ser representada como abaixo. Representamos também dois vetores que vamos usar para fazer a totalização de produtos e produtos vendidos por região.
Produtos TotalProdutoRegiao
1,1 | 1,2 | ... | ... | 1,10 | 1 | ||||||||
2,1 | 2 | ||||||||||||
3,1 | ... | ||||||||||||
... | ... | ||||||||||||
2000,1 | 2000,10 |
2000
|
|||||||||||
1 | 2 | ... | 10 |
TotalProdutosPorRegiao
Vamos agora mostrar o código que implementa estas funcionalidades:
Dim Produtos(2000, 10) As Long Dim TotalProdutoRegiao(2000) As Long Dim TotalProdutosPorRegiao(10) As Long Dim intLinha As Integer Dim intColuna As Integer For intLinha = 1 To 2000 For intColuna = 1 To 10 'soma atraves das linhas TotalProdutoRegiao(intLinha) += Produtos(intLinha, intColuna) 'soma as colunas TotalProdutosPorRegiao(intColuna) += Produtos(intLinha, intColuna) Next Next |
O código acima leva em conta que o array Produtos tenha sido inicializado com os valores de uma tabela e pode ser usado para calcular os totais alimentando os arrays declarados para este fim.
Declarando arrays de arrays (jagged arrays)
Neste caso temos que cada elemento do array é outro array que pode conter qualquer número de elementos. A declaração é feita da seguinte forma:
Dim Valores(9)() As Integer
No caso cima temos 10 entradas , sendo que cada uma é um array de inteiros.
Podemos também inicializar um array de array quando o declaramos , embora isto seja um tanto mais complexo que iniciar um array comum. Para isto precisamos criar um array de objetos para cada entrada.
Dim Vetor1()
As Integer = {1, 2, 3}
Dim Vetor2() As Integer = {4, 5}
Dim Vetores()() As Integer = {Vetor1, Vetor2}
Podemos também iniciar os sub-arrays da seguinte forma:
Dim
Vetores()() As Integer = { _
New Integer() {1, 2, 3}, _
New Integer() {4, 5} _
}
que idêntico a : Dim Vetores()() As Integer = { New Integer() {1, 2, 3}, New Integer() {4, 5} }
Um exemplo prático para este tipo de array seria a possibilidade de criar um array dos meses do ano onde cada mês possui um número diferente de dias. O código abaixo faz exatamente esta declaração:
Dim Vendas()() As Double = {New Double(11) {}} Dim Mes As Integer Dim Dias As Integer For Mes = 0 To 11 Dias = DateTime.DaysInMonth(Year(Now), Mes) 'Pega o número de dias do mes. Vendas(Mes) = New Double(Dias - 1) {} 'Atribui um array para o mes. Next Mes |
Arrays de objetos
A classe array não tem o seu próprio construtor de forma que você não pode criar um array de objetos do princípio. Você pode usar o método CreateInstance para criar um array de um tipo específico. Este método possui muitas versões que podemos usar vejamos um exemplo:
Dim Nomes As Array = Array.CreateInstance( GetType(String), 3, 3, 10)
A declaração acima cria um array de strings com três dimensões. A primeira dimensão tem 3 elementos , a segunda também 3 e a terceira 10 elementos. Totalizando 90 elementos com indice de (0,0,0) a (2,2,9).
Com isto podemos criar um array e preenchê-lo com outros arrays de diferentes tipos.
Por ora acabei, voltarei ao assunto array em outro artigo. Até lá...
Veja os
Destaques e novidades do
SUPER DVD Visual Basic (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. Veja também os Cursos com vídeo aulas e projetos exemplos: |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#