Você está na página 1de 6

05/10/2015

Arrays

Arrays
Alm de toda potencialidade que os arrays possibilitam dentro do C#, conforme vimos no artigo anterior,
maior poder foi delegado aos programadores quando falamos de collections e nos aprofundamos nas classes
que o framework nos traz para tratamento de arrays. Tenho a certeza que o estudo que fazermos agora sobre
a classe System.Array e o System.Collections o deixar surpreso com a potencialidade que .NET FrameWork
nos colocou a disposio para o tratamento de arrays e as vrias maneiras e possibilidades de trabalho.
Viso Geral Sobre a Classe System.Array
Interessante notar que os tipos int, char, double etc. so chamados de type Values ou tipos de valores, o
que significa isso? Significa que uma varivel do Tipo INT contem um valor inteiro mas o objeto INT ou a
palavra reservada que voc utilizou para declarar a varivel do tipo inteira um Tipo de Valor, o Valor contido
um inteiro, ou seja, sua varivel iint contador; por exemplo, uma varivel do tipo inteiro de um valor
inteiro, por isso classificado como um type value ou um tipo valor, que em nosso exemplo um tipo que
contm um valor inteiro.
No caso das arrays, o tratamento e diferente, porque? Porque as arrays no so tipo de valores e sim
referencia a Tipos de Valores, ou seja, quando eu tenho um array de inteiros de 10 posies porque nossa
array uma array que faz referencia a 10 tipo de inteiros que possuem valores inteiros, hierarquicamente
poderamos definir da seguinte forma:
int[]inteiros=newint[10];>UmArraydeinteirosquequefazreferenciaa10TiposdeVal
ores(TypeValues)Inteiros,quecontmValoresinteiros.
Este conceito e interessante porque atravs deles que voc comea a entender porque determinados
mtodos um array e inteiro possui e um Inteiro no possui. Tambm fica bem fixo em nosso conhecimento que
existe uma diferena entre CONTER um valor, SER um tipo de valor e fazer REFERENCIA a um tipo de valor,
como o caso dos arrays.
Agora, transportando isso para nossa classe Array, comeamos a entender que sua inicializao e uso diferem
quando estamos utilizando nossa Classe System.Array. Porque? Porque nossa classe herda um nvel a mais
dos que comentamos anteriormente Conter, Ser, Referencia na verdade nossa classe herda todos os tipos
de arrays possvel, double[];object[];int[] ... o que possibilita uma manuteno muito mais simples de nosso
array.
Prova disso o exemplo abaixo:
ArrayaInteiros=newint[10];//OK
int[]aiInteiros=newint[10];//OK
Neste caso a inicializao funciona Normalmente e OK, poderem se inicializarmos nossa aiInteiros que deriva
da classe array da mesma maneia como inicializamos nossa array aInteiros ento teremos um problema de
compilao, porque? Veja o exemplo abaixo:
//Errodecompilao
ArrayaInteiros={1,2,3,4,5,6,7,8,9,0};
int[]aiInteiros={1,2,3,4,5,6,7,8,9,0};
//ok,inicializaoCorreta
ArrayaInteiros=newint[10]{1,2,3,4,5,6,7,8,9,0};
int[]aiInteiros={1,2,3,4,5,6,7,8,9,0};
https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

1/6

05/10/2015

Arrays

Isso porque sempre quando utilizamos a classe array, devemos indicar a que tipo esta classe esta fazendo
referencia.

Conhecendo o "Collection Classes"


O NameSpace cedido pelo .Net FrameWork System.Collections sem duvida um mundo novo para os amantes
de programao Windows e nos d possibilidades incrveis de trabalharmos com arrays neste caso como
Objetos Efetivamente, pois podem conter QUALQUER VALOR e termos toda flexibilidade necessria para
realizarmos nossas tarefas.
Existem quatro poderosos objetos que o Collections nos disponibiliza, so eles:
QUEUE, STACK, SORTED LIST, ARRAY LIST.

1) QUEUE
Este sem duvida um dos mais poderosos contrutores de arrays, por assim dizer, possibilita a concatenao
de strings e obedece a cadeia conhecida como FIFO First Intput, First OutPut primeiros que entra, primeiro
que sai nada muito diferente do que j conhecemos hoje, porm com algumas vantagens. Na figura abaixo
voc pode observar os diversos mtodos que esto a disposio quando utilizado o QUEUE para a definio
de sua varivel.

Mtodo mais utilizado o Enqueue que permite a concatenao nas posies subseqentes de nossa array,
acima est o Dequeue que possibilita a retirada de valores de nossa array obedecendo a ordem FIFO.
muito fcil trabalhar com o tipo QUEUE, por exemplo, vamos montar um array com QUEUE onde nosso
objetivo concatenar nomes dos 5cinco primeiros ganhadores de uma competio e depois imprimilos.
Verifique antes, em seu projeto em C#, se esta declarado os seguintes NameSpaces em seu cdigo:
usingSystem;
usingSystem.Collections;
Uma vez certificado disso adicione o seguinte cdigo:
QueueqInteiros=newQueue();
qInteiros.Enqueue("Ganhador1");
qInteiros.Enqueue("Ganhador2");
qInteiros.Enqueue("Ganhador3");
qInteiros.Enqueue("Ganhador4");
qInteiros.Enqueue("Ganhador5");
while(qInteiros.Count!=0)
https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

2/6

05/10/2015

Arrays

Console.WriteLine(qInteiros.Dequeue().ToString());
Para ver o resultado pressione ALT+CTRL+O letra O para mostrar para voc a janela de OUTPUT.
Observe ento as facilidades herdadas pelo Collection classes e pelo uso do Objeto QUEUE, so eles:
1)No foi necessrio indicar o tamanho da varivel, ou seja, ela se dimensiona de acordo com sua
necessiadade
2)No foi necessrio um contador para indicar at quando nosso while deveria estar imprimindo o
contedo de nossa array de strings, porque isso totalmente controlado pelos processos herdados do
QUEUE desde a classe Collections.
Porm aqui vale um aviso, o DEQUEUE, remove literalmente os dados de nossa array, no permitindo uma
nova impresso do contedo de nosso array, para que voc possa extrair os dados de um QUEUE, voc
poder utilizar o mtodo PEEK, que extrai o contedo de nosso array sem removlo literalmente de nossa
varivel.
A, uma vez descoberto o Collection Classes voc sem duvida poder passear pelos mtodos oferecidos por
ele e descobrir que sem nenhum esforo, por exemplo, voc pode fazer uma consulta a seu array e descobrir
que determinada string est contida e nosso array, utilizando apenas o mtodo CONTAINS, por exemplo:
qInteiros.Contains("Ganhador5");//DevolverTRUE
qInteiros.Contains("CSHARP");//DevolverFALSE
qInteiros.Contains("ganhador5");//DevolverFALSEelesensitivecase
Aqui tambm vale outro aviso, que para voc ler um valor especifico de uma posio de um QUEUE
necessrio copilo inteiramente para um array e logo acessar ao ndice especifico deste array ao que voc
copiou os valores do QUEUE, para partes de seu cdigo em que voc necessitara acessar a um valor
especfico de um ndice de seu array, no aconselhamos o uso do QUEUE, onde super pratico para filas,
por assim dizer, para estes casos aconselhamos o uso do ArrayList que abordaremos alguns pargrafos a
frente.
Mas de todas as formas segue a maneira de como copiar e acessar a um valor especifico do QUEUE, sem
perder o contedo de sua varivel por no utilizar o DEQUEUE:
System.String[]MyArray=newSystem.String[10];
QueueqInteiros=newQueue();
qInteiros.Enqueue("Ganhardor1");
qInteiros.Enqueue("Ganhardor2");
qInteiros.Enqueue("Ganhardor3");
qInteiros.Enqueue("Ganhardor4");
qInteiros.Enqueue("Ganhardor5");
qInteiros.CopyTo(MyArray,0);Console.WriteLine("Index3="+MyArray[3].ToString());

2) STACK
O STACK possui os mesmos mtodos do QUEUE porm ele ao invs de utilizar o ENQUEUE, utiliza o Push,
isso mesmo como no ASM, lembra??!! E ao invs de utilizar o DEQUEUE, utiliza o POP. Fcil!! E ao invs de
utilizarse do mtodo FIFO como no QUEUE utilizase do mtodo de enfileirao LIFO (Last Input First
OutPut Ultimo que entra, primeiro que sai) .
Nada com um bom trecho de cdigo para nos ajudar a entender isso:
No esquea de certificarse do uso do NameSpace System.Collections, e uam vez certificado adicione a
seguinte linha de cdigo a um Boto, por exemplo,:
https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

3/6

05/10/2015

Arrays

StackscArray=newStack();
scArray.Push("Ganhador1");
scArray.Push("Ganhador2");
scArray.Push("Ganhador3");
scArray.Push("Ganhador4");
scArray.Push("Ganhador5");
while(scArray.Count!=0)
Console.WriteLine(scArray.Pop().ToString());

Resultado do uso do STACK, observe que foi aplicado o LIFO como ordem de impresso e captura dos
dados Last Input, First OutPut

3) Sorted List
O Sorted List, conforme o prprio nome diz, serve para trabalharmos com listas ordenadas dentro de nosso
array, mas nos permite mais que isso, permite tambm que voc possa acessar ao contedo atravs de um
Label e no mais atravs de um ndice, o que pode em alguns momentos de nossa codificao ser muito,
muito interessante. Para este Objeto herdado de nosa Classe System.Collections, existem dois mtodos
importantes que vamos estudar agora, e que so a chave para o bom uso do Tipo SortedList de nossa classe
Collections.
KEY e Value Que conforme os prprios nomes me ingles indicam, so as chaves que nos serviro para
buscas dentro de nosso array e os valores dentro de nosso array.
Nada melhor do que verificarmos o funcionamento disso na pratica, vamos l:
SortedList Paises = new SortedList;
//Preenchendonossalista,voceadicinaachavedebuscaeovalorquevoc
//desejaestararmazenandoemnossaArray
Paises.Add("Brasil",0);
Paises.Add("Espanha",1);
Paises.Add("Alemanha",2);
Paises.Add("Mexico",3);
Paises.Add("Italia",4);
foreach(DictionaryEntrylocaisinPaises)
Console.WriteLine(locais.Key.ToString()+"="+locais.Value.ToString());

https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

4/6

05/10/2015

Arrays

Observe que a lista foi impressa, agora no com o FIFO ou LIFO e sim de forma ordenada atravs da
propriedade KEY de nossa Lista
Viram!! Sem duvida o sorted list pode ser uma verdadeira mo na roda para alguns processos que
necessitemos controlar.
//EstecdigoremoveaAlemanhadenossalistaeoForEachimprimirapenas
//osoutrospaises,redimensionandosemnecessidadedecdigo,nossaarray.
Paises.Remove("Alemanha");
foreach(DictionaryEntrylocaisinPaises)
Console.WriteLine(locais.Key.ToString()+"="+locais.Value.ToString());
No cdigo Abaixo, o resultado ser ESPANHA, porque estamos lidando com um SortedList, ou seja,
independente de como estamos inputando os dados, o FrameWork sempre tratar este dado j como
ordenado e no ir considerar a ordem de como foram colocados em nosso array.
Veja o Cdigo Abaixo:
SortedListPaises=newSortedList();
Paises.Add("Brasil",0);
Paises.Add("Espanha",1);
Paises.Add("Alemanha",2);
Paises.Add("Mexico",3);
Paises.Add("Italia",4);
foreach(DictionaryEntrylocaisinPaises)
Console.WriteLine(locais.Key.ToString()+"="+locais.Value.ToString());
Console.WriteLine(Paises.GetKey(2).ToString());

Resultado do Cdigo acima > impresso o Key Espanha porque ela quem contem o ndice numero 2dois
j com a lista ordenada. [0]=Alemanha, [1]=Brasil, [2]=Espanha.
https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

5/6

05/10/2015

Arrays

4) ArrayList
Este outro membro do Collection Class que permite um trabalho flexvel com os Arrays.
Uma das caractersticas do ArrayList a possibilidade de redimensionarse de acordo com a necessidade, sem
que tenhamos que indicar previamente seu tamanho, a possibilidade de trabalharmos com o Valor de nosso
Array e com o ndice de nosso Array tambm muito interessante e economiza sem duvida muito trabalho no
momento em que desejamos, por exemplo, remover um valor de nosso array.
Por exemplo, veja o cdigo abaixo:
ArrayListExtenso=newArrayList();
Extenso.Add("UM");
Extenso.Add("DOIS");
Extenso.Add("TRES");
Extenso.Add("QUATRO");
Extenso.Add("CINCO");
Extenso.Add("SEIS");
for(intcontador=0;contador!=Extenso.Count;contador++)
Console.WriteLine(Extenso[contador].ToString());
Extenso.Remove("CINCO");//RemovemosondicequecontemovaloroCINCO
Extenso.RemoveAt(2);//Removemosondice2,independentedeseuvalor
for(intcontador=0;contador!=Extenso.Count;contador++)
Console.WriteLine(Extenso[contador].ToString());
Bem, isso a!!! Espero que vocs tenham gostado do resultado de nosso estudo do collection classes e toda
a potencialidade oferecida por este classe, que sem duvida facilitar em muito nosso diaadia.
No prximo artigo vamos estudar outra particularidade interessante do C#.
Um Abrao!!
Claudenir Campos Andrade MVP Microsoft, Autor do livro Automao Comercial com VB.net e C#
www.erica.com.br , gerencia a equipe de desenvolvimento de sw da Bematech e o programa Bematech
Software Partners. Escreve artigos para o site MSDN , Blaz www.blaz.com.br, revista desenvolvedores,
palestrantes de diversos eventos de Automao comercial e o uso da plataforma .net neste mercado como o
Tecnical Day da Linha de Cdigo e do Frum de Desenvolvimento promovido pela Frum Access, Seminrios
na Microsoft e evento exclusivos dirigidos ao publico de desenvolvedores para automao comercial.
claudenir_campos@hotmail.com claudenir@bematech.com.br
Faa o download deste documento:
Trabalhando com Arrays no C# parte 2
formato Word,2,53 MB

2015 Microsoft

https://msdn.microsoft.com/ptbr/library/cc564861(d=printer).aspx

6/6

Você também pode gostar