
Olá pessoal, vamos dar continuidade às postagens de Visual Basic.NET, só um pouquinho atrasadas… Infelizmente não vai dar para manter a regularidade de um post por semana.
O assunto é vetores, então, vamos lá.
Declaração
Um array é um tipo de dado capaz de armazenar um conjunto de valores, diferente das variáveis que armazenam somente um valor de cada vez. E cada um dos elementos armazenados no array é referenciado por um índice.
É como se fosse um armário com várias gavetas, onde cada gaveta é etiquetada. Os índices são as etiquetas, que usamos para identificar as gavetas, e as gavetas são as posições do array onde guardamos o dado (só um dado por índice).
Ah, os valores armazenados em cada posição do array devem ser do mesmo tipo, a não ser que você declare um array do tipo Object.
Os arrays podem ter uma ou mais dimensões. Vamos ver por enquanto só arrays unidimensionais, que chamamos carinhosamente de vetores. Os arrays de duas dimensões ou mais são conhecidos como matrizes. Uma matriz com duas dimensões é semelhante a uma tabela, com linhas e colunas. A partir de três dimensões, a visualização já fica mais complicada.
A declaração de vetores pode ser feita nas formas:
Dim Vetor(0 To 5) As String
‘ou
Dim Vetor(5) As String
Os índices dos arrays sempre começam com 0 (no VB 6, havia a instrução Option Base para fazer com que o início dos índices fosse igual a 1, mas essa opção não existe mais). Ou seja, o array declarado acima vai de 0 até 5, o que significa que podemos ter as seguintes referências para posições:
Vetor(0) = “valor qualquer”
Vetor(1) = “outro valor”
Vetor(2) = “Guanabara”
Vetor(3) = “Teste”
Vetor(4) = “Olá Mundo”
Vetor(5) = “Hostnet”
Isso nos dá 6 posições para guardar valores somente do tipo String, porque de acordo com a declaração, o array é do tipo String.
Associando valores
Como vimos acima, os elementos dos arrays são referenciados por índices, sendo o menor deles sempre zero. Esses índices podem ser usados para ler os valores ou atribuir um valor ao “endereço” que desejarmos.
No momento da declaração de um array, os elementos podem ser definidos dessa forma:
Dim Vetor() As String = {“Qualquer coisa”, “Outra coisa”, “Terceira coisa”}
No caso acima, automaticamente o array vai ter três posições. É como se declarássemos Dim Vetor(2) As String (lembrem-se que há a posição zero, não esqueçam!)
A leitura e associação de valores é feita da mesma forma que variáveis comuns, só que precisamos dizer qual é o índice desejado:
Console.WriteLine(Vetor(1)) ‘Escrevendo o valor na tela
Dim PrimeiroValor As String = Vetor(0)
Cuidado para não informar um índice que esteja fora dos limites do array, caso contrário você vai gerar um erro nada legal – uma exceção, do tipo IndexOutOfRangeException.
Funções de Array
Quem já trabalhou com arrays no Visual Basic 6, sabe que existe uma lista de funções que são úteis para trabalhar com arrays. O Visual Basic 9 (2008) traz essas funções também, mas eu pessoalmente prefiro não mais trabalhar com elas, pelos seguintes motivos:
1° – Existem métodos e funções da plataforma .NET que fazem a mesma coisa que essas funções antigas faziam, então é melhor se acostumar com os novos e deixar os antigos para trás. Até porque esses mesmos métodos funcionarão no C#;
2º – Métodos da plataforma .NET deixam a aplicação mais rápida do que os métodos mantidos por questões de compatibilidade com versões antigas do VB;
3° – Não me surpreenderia se esses métodos antigos fossem retirados da linguagem em versões futuras.
Vamos aos principais:
- GetUpperBound(dimension As Integer) (antigo Ubound)
Console.WriteLine( (Vetor.GetUpperBound).ToString)
Retorna o maior índice de uma dimensão passada como parâmetro. A primeira dimensão é igual a zero, a segunda igual a um e assim vai.
- GetLowerBound(dimension As Integer) (antigo LBound)
Console.WriteLine( (Vetor.GetLowerBound).ToString)
Parecida com função anterior, retorna o menor índice de uma dimensão passada como parâmetro.
- SetValue(value As Object, index As Integer)
Vetor.SetValue(“valor qualquer”, 1)
- Armazena um valor em um índice específico do array.
- Length() As Integer
Console.WriteLine(Vetor.Length.ToString)
Propriedade que retorna o número total de elementos do array.
- Rank() As Integer
Console.WriteLine(Vetor.Rank.ToString)
Propriedade que retorna o número total de dimensões do array.
- System.Array.Reverse(array As System.Array)
Dim VetorReverso = Array.Reverse(Vetor)
Inverte os elementos do array
- System.Array.Resize(ByRef array As System.Array, newSize As Integer)
Array.Resize(Vetor, Vetor.Length + 2)
Modifica o tamanho do array
- System.Array.Sort(array As System.Array)
Dim VetorOrdenado = Array.Sort(Vetor)
Ordena os elementos do array
Redimensionando de outra forma
Além do método Resize, existe uma palavra reservada chamada ReDim. Com o uso dela, podemos redimensionar um array, como abaixo:
Dim Vetor() As Integer = {1, 3, 5, 7}
ReDim Vetor(9)
Assim, Vetor vai ter 10 posições (de 0 a 9), e não somente as 4 posições (de 0 a 3) que tinha no momento da declaração.
Mas há um problema: o ReDim apaga os valores que já estão armazenados no array. Ou seja, se você redimensionar um array usando essa declaração, o array estará todo “em branco” depois de ser redimensionado;
Se não quiser que isso aconteça, acrescente a palavra Preserve após o ReDim. Usando o exemplo acima, fica Redim Preserve Vetor(9).
O laço For Each
Essa variação do laço For…Next tradicional pode ser utilizada em arrays, coleções, enumerações e vários outros tipos de dados, que armazenem conjuntos de valores. Ele permite, a cada repetição do laço, trabalharmos com um valor de cada vez que esteja presente no array desejado. A sintaxe é:
For Each <variável> [As <tipo>] In <array>
<bloco de comandos>
Next [<variável>]
Veja abaixo um exemplo:

A variável Numero recebe, a cada loop, um valor associado a um índice do array Vetor, começando do índice zero. Veja que a cada loop elevamos ao quadrado cada um dos números existentes no array.
Essa estrutura é útil quando se deseja efetuar certas operações que envolvam os elementos do array, trabalhando um de cada vez, como foi o caso acima.
Galera, acho que deu para deixar algumas coisas sobre arrays.
Eu gostaria de saber a opinião de vocês sobre as postagens. Estão compreendendo o que é escrito ou existem dúvidas sobre o conteúdo? Alguma pergunta a respeito da linguagem?
A única forma de eu saber o quanto vocês estão aprovando ou desaprovando a coluna é lendo a opinião de vocês nos comentários, pois só assim eu posso fazer postagens realmente boas. Tem algo desagradando? Mandem sugestões. Abraços e até a próxima.

Muito bom Marcelo.
Eu sei que é complicado manter o rítimo de um post por semana, mas pense em nós que queremos aprender!
setembro 13, 2008 @ 4:00 pm
Muito bom Marcelo!

—

ArrayList numberCollection = new ArrayList();
numberCollection.Add(1);
numberCollection.Add(2);
numberCollection.Add(3);numberCollection.ForEach(num => Console.WriteLine(num));
–
God bless the lambda expression!
Coming soon in the C# articles
setembro 13, 2008 @ 7:35 pm







