Vous êtes sur la page 1sur 11

C# - Conceitos - Apresentando Arrays

J falei sobre arrays mas relacionados com a linguagem VB .NET. O conceito em si o mesmo mas a sintaxe em C# diferente por isso vou comear do incio para apresentar os Arrays e como us-los na linguagem C#. Vou comear com a definio de array da wikipdia (http://pt.wikipedia.org/wiki/Array) resumida: Um Array um conjunto de elementos de um mesmo tipo de dados onde cada elemento do conjunto acessado pela posio no array que dada atravs de um ndice (uma sequncia de nmeros inteiros). Um array de uma dimenso tambm conhecido como vetor,e , um array de mais de uma dimenso e conhecido como uma matriz. Agora uma definio mais geral: Um array uma estrutura de dados que contm uma srie de dados ordenados, chamados "elementos". Os elementos so referenciados por nmero ordinal (ndice), primeiro elemento 1, segundo 2, etc. Os elementos podem ser de qualquer tipo, string, caractere, numrico, data, etc. Se voc no fugiu da escola vai lembrar do conceito de Matriz em matemtica. Lembra ??? a mesma coisa...
Uma matriz real (ou complexa) uma funo que a cada par ordenado (i,j) no conjunto Smn associa um nmero real (ou complexo). Uma forma comum e prtica para representar uma matriz definida na forma acima atravs de uma tabela contendo mn nmeros reais (ou complexos).

http://twixar.com/6v9

Fonte :

Declarando Arrays em C#
Na linguagem C# os arrays possuem o ndice com base zero, ou seja, o primeiro elemento do array possui o ndice zero (0). Um array de uma dimenso declarado informando o tipo de dados do array seguido do nome do array, lembrando que devemos colocar colchetes ([]) depois do tipo do array e no aps o seu nome: Ex: int[] tabela; ==> correto

int tabela[]; ==> incorreto

Na linguagem C# o tamanho do arrray no parte do seu tipo, isso permite declarar uma array e em seguida atribuir qualquer array de objetos int a ele, sem considerar o seu tamanho:

Ex: int[] numeros; qualquer tamanho

//declara numeros como um array de inteiros de // numeros agora um array de 10 elementos // numeros agora um array de 20 elementos

numeros = new int[10]; numeros = new int[20];

Alm de arrays de uma dimenso a linguagem C# suporta os seguintes tipos de arrays:

- Arrays com mais de uma dimenso : string[,] names; int[,] array = new int[2, 2]; - Array-of-arrays (jagged): byte[][] resultados; int[][] numArray = new int[][] { new int[] {1,3,5}, new int[] {2,4,6,8,10} };

Criando e inicializando um Array


Em C# declaramos um array assim :

string[] nomes;

//array nomes de qualquer tamanho

mas isso no cria o array para fazer isso devemos declarar:

nomes = new string[5];

//array de strings de 5 elementos

finalmente para incializar o array fazemos assim:

nomes[0] nomes[1] nomes[2] nomes[3] nomes[4]

= = = = =

"Jos"; "Carlos"; "Macoratti"; "Miriam"; "Estela";

Observe o ndice indicando a posio do elemento no array. O primeiro elemento o zero e o ltimo 4. Assim temos 5 elementos no array com posies : 0,1,2,3 e 4. Para um array de mais de uma dimenso a sintaxe usada pode ser:

string[,] names = new string[5,4]; //declara um array bidimensional com 5 linhas e 4 colunas

Existem outras formas de iniciar um array: 1- Uma Dimenso

int[] numeros = new int[5] {1, 2, 3, 4, 5}; string[] nomes = new string[3] {"Mac", "Jessica", "MiMi"};
definindo o tamanho e o operador new

int[] numeros = new int[] {1, 2, 3, 4, 5}; string[] nomes = new string[] {Mac", "Jessica", "MiMi"};
omitindo o tamanho do array

int[] numeros = {1, 2, 3, 4, 5};


Omitindo o operador new

string[] nomes = {"Mac", "Jessica", "MiMi"};


2- Mais de uma Dimenso

int[,] numeros = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; string[,] amigos = new string[2, 2] { {"Mac","Jan"}, {"Mimi","Jeff"} }; int[,] numeros = new int[, ] { {1, 2}, {3, 4}, {5, 6} }; string[,] amigos = new string[, ] { {"Mac","Jan"}, {"Mimi","Jeff"} }; int[,] numeros = { {1, 2}, {3, 4}, {5, 6} };
Omitindo o operador new omitindo o tamanho do array definindo o tamanho e o operador new

string[,] amigos = { {"Mac","Jan"}, {"Mimi","Jeff"} };


3- Arrays de Arrays (jagged arrays)

int[][] numeros = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

definindo o tamanho e o operador new

int[][] numeros = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; omitindo o tamanho do array ou int[][] numeros = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

Acessando e percorrendo Arrays


Como voc j sabe os elementos contidos nos arrays so identificados por um ndice e por este nmero que acessamos um determinado elemento no array. Eu vou usar o Visual C# 2008 Express Edition nos exemplos deste artigo. No exemplo a seguir eu estou declarando um array unidimensional chamado numeros do tipo int e criando e inicializando o array com 5 elementos :

private void Form1_Load(object sender, EventArgs e) { int[] numeros = { 10, 9, 8, 7, 6 }; listBox1.Items.Add("Primeiro elemento: " + numeros[0]); listBox1.Items.Add("Segundo elemento: " + numeros[1]); listBox1.Items.Add("Terceiro elemento: " + numeros[2]); listBox1.Items.Add("Quarto elemento: " + numeros[3]); listBox1.Items.Add("Quinto elemento: " + numeros[4]); }

Note que para acessar um elemento eu utilizei o seu ndice, e como em C# os arrays so base zero, o primeiro elemento tem o ndice igual a zero (0). Ento para acessar um elemento em um array unidimensional eu uso a sintaxe:

nome_do_array[numero_do_indice]
Para um array de mais de uma dimenso somente temos que definir os demais ndices do array. No exemplo a seguir eu declaro um array bidimensional chamado numeros2 e a seguir crio e inicio o array com 5 elementos:

int[,] numeros2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }, { 9, 10 } }; listBox2.Items.Add("numeros2[0,0] = " + numeros2[0, 0]); listBox2.Items.Add("numeros2[0,1] = " + numeros2[0, 1]); listBox2.Items.Add("numeros2[1,0] = " + numeros2[1, 0]); listBox2.Items.Add("numeros2[1,1] = " + numeros2[1, 1]); listBox2.Items.Add("numeros2[2,0] = " + numeros2[2, 0]); listBox2.Items.Add("numeros2[2,1] = " + numeros2[2, 1]); listBox2.Items.Add("numeros2[3,0] = " + numeros2[3, 0]); listBox2.Items.Add("numeros2[3,1] = " + numeros2[3, 1]); listBox2.Items.Add("numeros2[4,0] = " + numeros2[4, 0]); listBox2.Items.Add("numeros2[4,1] = " + numeros2[4, 1]);

Observe que para acessar os elementos do array eu tive que usar os dois ndices que indicam a posio do elemento no array. Para voc visualizar e entender melhor o conceito veja abaixo uma ilustrao do array definido acima e a sua matriz correspondente: Matriz 2 x 5 int[,] numeros2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }, { 9, 10 } }; numeros2[0, numeros2[0, numeros2[1, numeros2[1, numeros2[2, numeros2[2, numeros2[3, numeros2[3, numeros2[4, numeros2[4, 0] 1] 0] 1] 0] 1] 0] 1] 0] 1] = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10

Para atribuir valores a uma posio do array eu tambm uso os ndices. Assim temos:

int[,] matriz3x3 = { { 1, 0,0 }, { 0,1,0 }, { 0,0,1 } };

Outro exemplo de array bidimensional: string[,] livros = { {"Macbeth", "Shakespear", "ID12341"}, {"1984", "George Owell", "ID234234"}, {"ASP - Internet ", "Macoratti", "ID3422134"} }; numeros[4] = 100 numeros [1,1] = 200

Este array contm 3 linhas e 3 colunas. Para cada livro temos uma linha e cada livro contm 3 colunas : titulo, autor e ID do livro.

//atribuindo o valor ao quarto elemento do array //atribuindo o valor 200 ao elemento de posio [1,1] do array

Percorrendo Arrays
Deu para perceber que acessar e percorrer arrays com muitos elementos pode dar um trabalho danado. para isso que servem os laos (loops), para percorrer arrays sem fazer esforo. Vejamos alguns dos principais laos usados: O lao for usado para ser executado um determinado nmero de vezes usando uma varivel com um valor determinado e incrementando esta varivel at o valor determinado. No exemplo abaixo a varivel i recebe o valor inicial zero e a incrementa (I++) at que o seu valor seja menor que 10. for (int i = 0; i < 10; i++) { // codigo a ser executado } Assim podemos usar um lao for para percorrer um array existente ou atribuir valores a um array que foi declarado. a) Exemplo: Percorrer o array numeros declarado a seguir e exibir os seus valores em um controle ListBox: int[] numeros = { 10, 9, 8, 7, 6, 5 };

listBox1.Items.Clear(); for (int i = 0; i < 6 ; i++) { listBox1.Items.Add("Elemento [" + i +"] = " + numeros[i]); }

O lao for usado inicia a partir do ndice zero; Percorre o array at que o valor de i seja menor que 6 , pois o array possui seis elementos mas comeamos contar a partir de zero: (0,1,2,3,4,5) numeros[i] representa o array e i o ndice atribudo a cada elemento

O resultado exibido no formulrio Windows Forms ser:

b) Exemplo: Atribuir valores o array inteiros declarado a seguir e exibir os valores em um controle ListBox. int[] inteiros = new int[10]; A atribuio esta sendo feita na declarao: inteiros[i] = i; O resultado obtido visto na figura abaixo:

int[] inteiros = new int[10]; listBox1.Items.Clear(); listBox1.Items.Add("Array inteiros => int[] inteiros = new int[10]"); for (int i = 0; i < 10; i++) { inteiros[i] = i; listBox1.Items.Add("Elemento [" + i + "] = " + i ); }

Podemos usar laos while e do-while para fazer a mesma operao lembrando que esses laos so executados enquanto certa condio esta sendo atendida. Exemplo: Estrutura do lao while e do-while;

while (i < 10) { } ---------------------------------------------------------do { } while (i < 10);


A principal diferena entre o lao while e do-while que no lao while , a expresso verificada antes do incio da execuo do lao e se o resultado for falso o lao nunca ser executado. No lao do-while a verificao feita aps a primeira execuo.

O lao Foreach
O lao foreach pode ser usado para acessar cada elemento do vetor ou coleo. A sintaxe usada :

foreach (<tipo> <variavel> in <coleo>) Exemplo com vetor unidimensional:


int[] numeros = new int[5]; numeros [0] = 10; 4; 32; 1; 20; foreach (int i in numeros ) { listBox1.Items.Add("i = " + i); } numeros [1] = numeros [2] = numeros [3] = numeros [4] =

Exemplo com vetor bidimensional:


int[,] numeros2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }, { 9, 10 } }; foreach (int i in numeros2 ) { listBox1.Items.Add("i = " + i); }

Exemplo com lao foreach usando strings:


string[] semana = new string[7]; semana[0] = "Domingo"; semana[1] = "Segundafeira";

semana[2] feira"; semana[3] feira"; semana[4] feira"; semana[5] feira"; semana[6]

= "Tera= "Quarta= "Quinta= "Sexta= "Sabado";

foreach (string dia in semana) { listBox1.items.Add(dia) ; }

Usando os mtodos e propriedades do objeto Array


Em C# arrays so objetos. A classe System.Array a classe abstrata que a base para todos os tipos de arrays.
Observao importante: No .NET Framework verso 2.0, o Classe de Array implementa o System.Collections.Generic.IList<T>, System.Collections.Generic.ICollection<T>e System.Collections.Generic.IEnumerable<T> genrico interfaces.As implementaes so fornecidos para matrizes em tempo de execuo, e portanto no so visveis para as ferramentas de documentao.Como resultado, as interfaces Genricas no aparecem na sintaxe de declarao para a classe Array, e no h nenhum tpico de referncia para membros de interface que so acessveis somente por converter uma matriz para o tipo de interface Genrica (implementaes de interface explcita).

A classe Array fornece propriedades e mtodos para criar, manipular, procurar e ordenar arrays. Abaixo temos os mais importantes: 1- Propriedades IsFixedSize IsReadOnly Retorna um valor indicando se um array possui um
tamanho fixo ou no. Retorna um a valor indicando se um array somente-leitura ou no. array thread-safe ou no.

IsSynchronized Retorna um a valor que indica se o acesso a um Length Rank SyncRoot 2- Mtodos BinarySearch
Procura em um array unidimensional ordenado por um valor usando o algoritmo de busca binrio. Retorna o nmero total de itens em todas as dimenses de um array Retorna o nmero de dimenses de um array Retorna um objeto que pode ser usado para sincronizar o acesso a um array.

Clear Clone Copy CopyTo

Remove todos os itens de um array e define um intervalo de itens no array com valor zero. Cria uma cpia do Array. Copia uma seo de um array para outro array e realiza a converso de tipos e boxing requeridas. Copia todos os elementos do array unidimensional atual para o array unidimensional especificado iniciando no ndice de destino especificado do array.

CreateInstance Inicializa uma nova instncia da classe Array. GetEnumerator Retorna um IEnumerator para o Array.
Retorna o nmero de itens de um Array. GetLength GetLowerBoun Retorna o primeiro item de um Array. d GetUpperBound Retorna o ltimo item de um Array.

GetValue IndexOf LastIndexOf Reverse SetValue Sort

Retorna o valor do item especificado no Array. Retorna o ndice da primeira ocorrncia de um valor em um array de uma dimenso ou em uma poro do Array. Retorna o ndice da ltima ocorrncia de um valor em um array unidimensional ou em uma poro do Array. Reverte a ordem de um item em um array de uma dimenso ou parte do array. Define o item especificado em um array atual para o valor definido. Ordena os itens de um array.

A seguir temos alguns exemplos de utilizao das propriedades e mtodos: Array usado nos exemplos:

string[] Cores = { "vermelho", "verde", "amarelo", "laranja", "azul" };


Obter o tamanho do Array Cores.Length);

Ordenar o Array Inverter a ordem dos itens no Array

Array.Sort(Cores)

Array.Reverse(Cores)

for( int j = Cores.GetLowerBound(0); j <= Cores.GetUpperBound(0); j++) Usar { GetLowerBound/GetUpperBound listBox2.Items.Add("Cores[0] = " + j + " " + Cores[j]); } if (Cores.IsFixedSize) {

Verificando se o Array tem tamanho fixo

listBox2.Items.Add("O array e fixo"); listBox2.Items.Add(" tamanho => (Cores.Lenght) = " + Cores.Length); listBox2.Items.Add(" intervalo => (Cores.Rank) = " + Cores.Rank); } object oCor = "verde";

Realizando uma busca binria no int retorno = Array.BinarySearch(Cores, oCor); Array if(retorno >=0) listBox2.Items.Add("Indice do Item " + retorno.ToString()); else listBox2.Items.Add("Item no localizado"); Obtendo o ndice de um item do int ind = Array.IndexOf(Cores, "verde"); listBox2.Items.Add("O ndice do item 'verde' e " + ind); Array E com isso creio que dei uma viso geral sobre os Arrays na linguagem C#. Consulte a documentao para mais exemplos e mais detalhes.