Arrays

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 8

 

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

Define um array com 5 elementos


Dim Vetor(4) As Integer
iniciados com zero
Dim Vetor As Integer =  new Define um array com 5 elementos
Integer(4) {} iniciados com zero
Dim Vetor() As Integer = {1, 2, 3, 4, Define um array com 5 elementos e
5} atribui valores a cada elemento
Dim Vetor As Integer =  new Define um array com 5 elementos e
Integer(4) { 0, 1, 2, 3, 4} atribui valores a cada elemento
Redimensiona o array Vetor para 11
Redim Vetor(10)
elementos
Redimensiona o array Vetor para 11
ReDim Preserve Vetor(10) 
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


0 São Paulo no array acima podemos usar o código :
1 Rio de Janeiro  
2 Belo Horizonte For i = 0 to 4                       
3 Brasília     Debug.WriteLine(Estados(i))
4 Porto Alegre Next i                                  

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
Declara um array do tipo String com 26 elementos
String
Private Quantidade(10)
Declara um array do tipo Integer com 11 elementos
As Integer

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
 
For Each nome In Materias
    Console.WriteLine(nome)
Next
 
Console.ReadLine()

End Sub
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
 
For Each i In
Quantidade
    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.

Métodos

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

If Vetor = Nothing then


      Response.Write(“O array não
esta inicializado.”)
Else
      Response.Write(“O array esta
inicializado”)
End if

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

Dim intEquipe As Integer


Dim decVendas As Decimal

Try

      intEquipe = CInt(txtEquipe.Text)


      decVendas = CDec(txtVendas.Text)

'verifica o numero da equipe (estamos


limitados pela definição do array)
If intEquipe >= 1 And intEquipe <= 5 Then

'acumula a quantidade das


vendas atribuindo os valores a
cada elemento do array
mdecTotalVendas(intEquipe) +=
decVendas

'limpa os textboxes e define o


foco
txtVendas.Text = ""
txtEquipe.Text = ""
txtEquipe.Focus()

Else

MessageBox.Show("Numero
atribuido a equipe esta incorreto
(Informe de 1 a 5).", _
"Dados informados inválidos", _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)

End If

Catch

MessageBox.Show("Informe o número da
equipe e o valor das vendas.", _
"Dados informados inválidos", _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)

End Try
 
End Sub

Private Sub cmdExibir_Click(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
cmdExibir.Click

Dim intEquipe As Integer

lstRelacao.Items.Clear()

'exibe os elementos do array no listbox


For intEquipe = 1 To 5
     lstRelacao.Items.Add("Equipe : " & CStr(intEquipe)
&"-"&
FormatCurrency(mdecTotalVendas(intEquipe)))
Next
 
End Sub
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
Declarando um array com duas dimensões de seis
elementos (indice(0,0) até indice(1,2)
Dim values(,) As Integer = { {1, 2,
A representação de sua matriz seria:
3}, {4, 5, 6}}
1 2 3
4 5 6

Dim values(,) As Integer = { _ Declara um array com três dimensões com 12 elementos : 
                                    {{1, 2, 3}, outra forma de ver o vetor seria: 
_
                                    {4, 5, 6}}, Dim values(,) As Integer = { {{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9},
_ {10, 11, 12}}}
                                    {{7, 8, 9},
A matriz que representaria o array é:
_
                                    {10, 11, 1 2 3
12}} _
4 5 6
                                    }
7 8 9
10 11 12
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)

Dim x,y,z as integer 

For x = 0 to 4
      For y = 0 to 4
            For z = 0 to 4
                  Vetor(x,y,z)
=x+y+z
            Next
      Next
Next 

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:
VB .NET Básico - Vídeo Aulas
C# Básico - Vídeo Aulas

    Gostou ?   Compartilhe no Facebook   Compartilhe no Tw itter

Referências:

Seção VB .NET do Site Macoratti.net


Super DVD .NET - A sua porta de entrada na plataforma .NET
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Seção C# do site Macoratti.net
Seção Visual Basic 6 do site Macoratti .net
Trabalhando com Arrays - Macoratti.net
C# - Apresentando Arrays - Macoratti.net

José Carlos Macoratti

Você também pode gostar