Camiseta Twitter !! Garanta já a sua!

[VB] Parte VI – Vetores

Categorias: Aprenda, Aulas, Colunas, VB

13 comente

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.

Related Posts with Thumbnails
  • Muito bom Marcelo.

    Eu sei que é complicado manter o rítimo de um post por semana, mas pense em nós que queremos aprender! :)

    [Responder]

    setembro 13, 2008 @ 4:00 pm
  • Renan Vieira

    Muito bom Marcelo! :D

    :idea:

    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 :lol:

    [Responder]

    setembro 13, 2008 @ 7:35 pm
  • Boa! mas fiquei meio perdido :cry:

    [Responder]

    setembro 13, 2008 @ 8:31 pm
  • # Renan
    Pode crer, você tem razão. :)

    # Riosney
    Qual parte você não entendeu bem ? ;)

    [Responder]

    setembro 13, 2008 @ 9:53 pm
  • # Marcelo Vieira

    ‘Não conhecia esta forma > Dim Vetor(0 To 5) As String
    ‘Sempre declaro direto…

    Dim Vetor(5) As String

    ‘Um lance muito maneiro do For Each… É que ele varre um Array ‘em busca de um determinado valor…

    Os posts na minha opinião estão perfeitos! Tem me ajudado muito no meu novo emprego.

    P.S. Qual é o assunto da próxima semana?

    [Responder]

    setembro 13, 2008 @ 10:45 pm
  • # Garu

    Ainda não decidi…. hehe, aguarde :mrgreen:

    O Visual Basic.NET está agora também no ZoomDigital.org, vejam no link http://www.zoomdigital.org/2008/09/13/visual-basicnet/

    [Responder]

    setembro 13, 2008 @ 11:03 pm
  • De boa Marcelo, reli e tudo funfou direito! Mas ainda continuo n sendo fan de programação :?

    [Responder]

    setembro 14, 2008 @ 5:06 pm
  • Guilherme (São Paulo- 14 Anos)

    Cara, melhor aula de programção que eu ja tive é a tua cara, éla é muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuito boa.
    :lol:

    [Responder]

    setembro 15, 2008 @ 10:15 am
  • Raphael Alves Soares-Rio-etesc-15 anos

    adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!:
    adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!:
    adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!: adorei,adorei,adorei,adorei :D :!:

    [Responder]

    setembro 15, 2008 @ 10:06 pm
  • Muito boa Marcelo! Parabéns! Mais uma ótima aula! :D

    [Responder]

    setembro 22, 2008 @ 10:53 am
  • Antonio

    Sempre gostei de VB, mas agora irei estudar delphi por ter grande aplicação no mercado também, mas não quero abondonar o bom VB. Minha pergunta é a seguinte: tenho um arquivo texto e queria importar os dados no excell. O problema é que o arquivo texto não é formatado, ou seja, é um relatório gerado de um banco de dados. Sai com cabeçalhos e outros texto, mas os campos que eu quero sempre estão no mesmo lugar e a linha se inicia com número que deve ser comparado com o que quero e somente assim for importado. Como faço pra colocar na planilha.

    blablalbablabla
    blablablablba
    numero valor1 valor2
    00050 23,00 45,00
    blababla
    00200 26,00 33,00
    blbablablabla

    exemplo acima, então quero pegar os dados do numero na linha onde esta o 50 e o 200 e o valor2 e passar para a planilha.
    número valor2
    50 45,00
    200 33,00
    ficando desta forma.
    E agora…
    Obrigado por qualquer ajuda.

    [Responder]

    janeiro 31, 2009 @ 9:48 am
  • Hélio Barbosa

    Preciso trabalhar com vetores com mais de uma dimensão. Exemplo: (Nome, Idade) ipoteticamente para 10 registros (linhas).
    Como devo fazer?????????

    [Responder]

    abril 2, 2009 @ 10:03 pm
  • Fernando

    Olá, estou tentando fazer uma função pequena (cerca de 15 linhas) mas não consigo. Quer fazer para mim? (cobrando, claro).
    Grato

    [Responder]

    novembro 23, 2010 @ 8:29 pm

Comentar