Escolar Documentos
Profissional Documentos
Cultura Documentos
Uhn... Vejamos...
Arrays - Tipo de variável que armazena um conjunto de valores do mesmo tipo ; Um arranjo de
elementos em uma ou mais dimensões ; Uma coleção de elementos do mesmo tipo no qual a
posição de cada elemento está definida de forma única por um inteiro.
Obs: Os arrays são semelhantes aos vetores , se você já ouviu falar em vetores e conhece algo sobre eles verá
que os conceitos envolvidos são semelhantes.
Acho que não foi um bom começo , mas , vamos tentar melhorar.
Vamos supor que você precise atribuir a três variáveis o nome de três pessoas que constam de uma relação. Como você faria ? Ora,
ora... abaixo as três etapas básicas envolvidas no tedioso processo...
Você teve que declarar 3 variáveis diferentes , uma para armazenar cada nome, mesmo cada nome sendo do
uma variável do tipo string.
Muito Bem, e se a relação tiver 5 pessoas e você precisar atribuir os nomes a variáveis ??? Ô Loco !!!!
sNomes(1)="João da Silva"
sNomes(2)="Maria Lima" for i=1 to 5
Dim sNomes(1 to 5) as String sNomes(3)="Pedro Sabino" msgbox snomes(i)
sNomes(4)="Marcia de Souza" Next
sNomes(5)="Carlos Manga"
declarando as variáveis atribuindo valores exibindo o conteúdo das variáveis
O que há de novo ?
Tudo se passa como se você tivesse um "armário" com 5 "gavetas " , cada gaveta possuindo um número de
identificação , e armazenando um nome distinto.
Conclusão :
1. Os Arrays permitem que definamos uma série de variáveis pelo mesmo nome diferenciando-as através
de um número inteiro chamado índice.
2. Todos os elementos de um array devem ser do mesmo tipo de dado: string , integer, etc.... ( para que os
elementos possam conter diferentes tipos de dados (strings , integers, objects, etc...) você deve definir o
array como do tipo Variant )
3. A quantidade de variáveis definidas por cada índice (número) determina o tamanho do array.
Ao declarar um array da seguinte forma: Dim Teste(4) o array possuirá 5 elementos pois o primeiro
elemento terá como índice o número zero. Assim : Teste(0) ,Teste(1), Teste(2), Teste(3) , Teste(4)
Para fugir a esta característica basta você definir o índice inferior e superior do array , assim : Dim
Teste(1 to 5) irá produzir :Teste(1) ,Teste(2), Teste(3), Teste(4) , Teste(5)
O VB trabalha com dois tipos de arrays : os fixos , que sempre permanece do mesmo tamanho e os dinâmicos
cujo tamanho pode ser alterado em tempo de processamento.
Arrays Fixos
A sintaxe para declarar um array fixo é:
Onde:
Dica - Um laço For/Next é uma das maneiras mais tradicionais de percorrer os elementos de um array e de
atribuir valores a um array. geralmente usamos a sintaxe abaixo:
Obs: A partir do VB5 temos também o laço For Each ...Next , o qual é específico para ser usado com coleções
e arrays. A sintaxe é:
Randomize
Redim nRandom(nTamanhoArray)
For Each Elemento in nRandom 'percorre cada elemento do array e atribui um valor
Elemento = int(Rnd(1) * 1000)
Next
Podemos declarar um array fixo das seguintes formas com relação a visibilidade do mesmo no projeto:
Escopo Visibilidade
uma variável definida a nível de procedure só é visível dentro da procedure onde foi
Local
declarada
uma variável declarada na General Declaration de um módulo ou de um formulário só
Módulo /Formulário é visível para todas as procedures dentro do módulo ou formulário onde foram
declaradas
uma variável declarada em um módulo como Public é visível em todas as procedures
Público
de seu projeto
Ao declarar um array você não pode exceder o intervalo do tipo de dados Long ( -2.147.483.648 to -
2.147.483.647) . Um número muito grande pode consumir muita memória. Por exemplo:
Cada elemento do seu array vai ser do tipo Long ; cada variável Long ocupa 4 bytes de memória
O array Teste precisará de 80.004 bytes de memória (20.001 x 4 ). Você acha pouco ????
Se você tiver 10 vetores idênticos no seu projeto terá consumido 800.040 bytes de memória.
Arrays contendo Arrays
Você pode criar um array do tipo Variant que contenha outros arrays de diferentes tipos de dados. O código
abaixo mostra exatamente isto:
'contadorA()
MsgBox arrX(1)(0) 'exibe o elemento de cada array
MsgBox arrX(1)(1)
MsgBox arrX(1)(2)
' contadorB()
MsgBox arrX(2)(0)
MsgBox arrX(2)(1)
MsgBox arrX(2)(2)
End Sub
Entendendo:
1) Primeiro declaramos o vetor ContadorA como do tipo inteiro com 3 elementos e atribuímos os números 0 ,
1 e 2 ao array
2) A seguir declaramos o vetor ContadorB como do tipo String com 3 elementos e atribuímos os números
Elemento - 0 ,Elemento - 1 e Elemento - 2 ao array
3) Finalmente declaramos o vetor arrX(2) como sendo do tipo Variant e atribuímos os vetores declarados
anteriormente como sendo elementos deste vetor. (Arrx(1)=contadorA() e ArrX(2)=ContadorB())
4) Para exibir os elementos do vetor usamos um índice para identifica o elemento do vetor e outro índice que
identifica o elemento do vetor que foi atribuído . Assim temos:
Para determinar os limites inferiores e superiores de um array podemos usar as funções UBound e LBound.
Assim:
LBound - Retorna um valor do tipo Long contendo o MENOR índice para a dimensão definida de um array.
Sintaxe: LBound(nome_do_array[, dimensão])
Parte Descrição
nome_do_array Nome do Array. Obrigatório
dimensão Opcional; Variant (Long). Indica qual a dimensão para qual o menor índice é retornado.Se
for omitido o padrão é 1.
UBound - Retorna um valor do tipo Long contendo o MAIOR índice para a dimensão definida de um array.
Sintaxe: LBound(nome_do_array[, dimensão])
Parte Descrição
nome_do_array Nome do Array. Obrigatório
dimensão Opcional; Variant (Long). Indica qual a dimensão para qual o MAOIR índice é
retornado.Se for omitido o padrão é 1.
Exemplo:
Dim Superior
Dim MeuArray(1 To 10, 5 To 15, 10 To 20) ' declara arrays multidimensional , no caso 3 dimensoes
Dim QualquerArray(10)
Superior = UBound(MeuArray, 1) ' Retorna 10.
Superior = UBound(MeuArray, 3) ' Retorna 20.
Superior = UBound(QualquerArray) ' Retorna 10. (refere-se a primeira dimensão)
Os arrays são muito usados para preencher Listas e controles como ListBox/ComboBox/ListView,etc. e
podemos usá-los também para serem preenchidos com o conteúdo de um Recordset. Para ilustrar isto vejamos o
exemplo a seguir que usa o método GetRows para armazenar em um vetor os dados de uma tabela:
Inicie um novo projeto no VB e no formulário padrão insira um botão de comando e um controle MSFLexGrid
A seguir insira o seguinte código no evento clique no botão de comando:
Set db = DBEngine.Workspaces(0).OpenDatabase("c:\teste\biblio.mdb")
Set rs = db.OpenRecordset("Authors", dbOpenTable)
rs.Close
Set rs = Nothing
db.Close
numero_de_colunas = UBound(dbvetor, 1)
numero_de_registros = UBound(dbvetor, 2)
'Preenche o grid
For i = 0 To numero_de_registros
For j = 0 To numero_de_colunas
linha = linha & dbvetor(j, i) & Chr(9)
Next j
Grid1.AddItem linha
linha = ""
Next i
End Sub
Estamos retornando em numero_de_colunas o maior valor do índice para a primeira dimensão: Ora este é o
valor relacionado a quantidade de campos selecionado e estamos retornando em numero_de_registros o maior
valor para índice da segunda dimensão que é o valor relacionado com a quantidade de registros.
Outro exemplo de utilização seria o preenchimento de ListBox ou ComboBox com o conteúdo de um array
usando as propriedades UBound e LBound. Vejamos a seguir:
Arrays Multidimensionais
Podemos declarar arrays de mais de uma dimensão; fazemos isto informando outro valor para o índice que
comporá a outra dimensão.A sintaxe para a declaração é a mesma da usada nos arrays unidimensionais. Assim
temos:
Declara um array com 5 elementos em duas dimensões(Lembre-se que o índice inferior inicial é sempre zero).
Desta forma o vetor pode ser entendido como uma tabela com 5 linhas e 5 colunas. A primeira dimensão ,
representando as linhas são identificadas pelos índices de 0 a 4 e a segunda dimensão seriam as colunas
identificadas pelos índices de 0 a 4. O total de elementos do array será 25 elementos ( 5 x 5 ).
Assim:
Tres_Dimensoes(0,0,0)
Tres_Dimensoes(1,1,1)
Tres_Dimensoes(2,1,0)
Abaixo temos uma representação gráfica simplificada de como seria a terceira dimensão.
Você , ao declarar um array multidimensional , pode definir o índice inicial e final para cada dimensão usando a
palavra chave To, então para o caso acima teríamos:
Para percorrer ou atribuir valores para arrays multidimensionais os laços For/Next são muito úteis. Vejamos
abaixo um exemplo de como preencher um array bidimensional :
Arrays Dinâmicos
Pode acontecer que num determinado momento você não saiba exatamente qual o tamanho do seu vetor, ou
pode acontecer também que após você definir um array com um tamanho ter que alterar o este tamanho quer
aumentando quer diminuindo. Como fazer isto ????
Para resolver estes problemas usamos os arrays dinâmicos , eles podem ser redimensionados a qualquer
momento , além de permitir um gerenciamento de memória mais amigável , pois você pode usar um array
definido para uma quantidade de elementos muito grande num momento e após usá-lo poderá liberar a memória
usada por ele redimensionando-o para quantidades menores de elementos.
Para criar um array dinâmico basta declarar o array sem definir os índices inferiores e superiores das
dimensões., isto é, você não define o tamanho do array .Exemplo: Dim Nomes() as String
Para alocar o número atual de elementos do array você deve usar a declaração ReDim. Assim
Então primeiro você declara o array (Dim) e define o seu tamanho em seguida para , se for o caso,
redimensioná-lo usando a declaração ReDim. Vejamos um exemplo:
End Sub
Redimensionamos o array para 10 elementos e exibimos a seguir o conteúdo do mesmo. Aqui vamos observar
que o resultado será: 0,0,0,0,0,0,0,0,0,0 , ou seja o conteúdo do array que antes era 1,2,3,4,5 foi perdido.
Atribuímos então novos valores aos elementos do array e exibimos o resultado que será : 1,2,3,4,5,6,7,8,9 e 10.
Aqui redimensionamos novamente o array , agora usando a palavra chave Preserve , para 15 elementos e a
seguir exibimos o conteúdo do array. O resultado será: 1,2,3,4,5,6,7,8,9 , 10 ,0 ,0 ,0 ,0, 0 , ou seja o conteúdo
anterior foi preservado e os novos elementos incluídos com valores 0. (valores numéricos são inicializados com
zero , strings com comprimento zero ("") , variant com vazio (empty)
Conclusão:
Ao redimensionar um array usando a palavra chave ReDim o conteúdo do array será perdido . Para evitar tal
efeito devemos usar a palavra Preserve na declaração. Ex: RedDim Preserve Teste(1 To 15) As Integer
Você pode usar a declaração ReDim repetidamente para alterar o numero de elementos e dimensões de um
array. Porem você não pode declarar um array de um tipo de dados e mais tarde usar a declaração Redim para
alterar o tipo de dados a menos que o tipo de dados usado foi o Variant, neste caso a alteração pode ser feita
usando a cláusula As.
Ao usar a palavra chave Preserve , você pode redimensionar somente a última dimensão do array você não
pode alterar o número dimensões. Assim se você usou um array com uma dimensão , você pode alterar a
dimensão , mas se você usou um array com duas dimensões você somente pode alterar a última dimensão e
ainda preservar o conteúdo do array.
Exemplo: ReDim X(10, 10, 10) ==> ReDim Preserve X(10, 10, 15)