<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diário de Códigos &#187; Array</title>
	<atom:link href="http://diariodecodigos.info/tag/array/feed/" rel="self" type="application/rss+xml" />
	<link>http://diariodecodigos.info</link>
	<description>Codigos Fonte, Artigos e Dicas</description>
	<lastBuildDate>Tue, 03 May 2011 17:42:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Classes de Coleção + Queue e Stack</title>
		<link>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/</link>
		<comments>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:06:23 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[collection]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=626</guid>
		<description><![CDATA[Nesse post apredemos a utilizar as Classes Queue e Stack]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-482" href="http://diariodecodigos.info/2009/09/mudanca-de-planos/c-2/"><img class="aligncenter size-full wp-image-482" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/09/C.png" alt="C#" width="550" height="57" /></a></p>
<p>Já vimos diversos tipos de Array a já aprendemos o que são Classes de Coleção, se você não viu ou não conhece procure nos Posts Relacionados no final da página.</p>
<p>Hoje vamos ver a Classe de Coleção <strong>Queue</strong> e <strong>Stack</strong>.</p>
<p><span id="more-626"></span><br />
<h2>Queue</h2>
<p>Essa classe utiliza o famoso conceito <em>FIFO</em> (First-in, First-out: primeiro a entrar, primeira a sair).</p>
<p>Imagine 3 potes vc enche o <em><strong>pote 1</strong></em>, o <strong><em>pote 2</em></strong> e o <em><strong>pote 3</strong></em>, o<em><strong> pote 1</strong></em> foi o primeiro a ser preenchido, agora você vai esvaziar o <strong><em>pote 1</em></strong> depois o <strong><em>pote 2</em></strong> e em seguida o <strong><em>pote 3</em></strong>. Pronto!</p>
<pre class="brush: csharp;">
using System;
using System.Collections;

// instânciamos uma nova fila
 Queue novaFilaN = new Queue();

 // Criamos um array com valores
 int[] nums = new int[]{2, 4, 6, 7, 8, 9};

 // inserimos valores na fila
 foreach (int numeros in nums)
 {
     novaFilaN.Enqueue(numeros);
     Console.WriteLine(numeros + &amp;amp;quot;&amp;amp;lt;- Enfileramos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Fila está assim: &amp;amp;quot;);

 // percorremos a fila
 foreach (int num in novaFilaN)
 {
     Console.WriteLine(num);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);
 // esvaziamos a fila

 while (novaFilaN.Count &amp;amp;gt; 0)
 {
     int number = (int)novaFilaN.Dequeue();
         /** O casting é nesessário pois a Classe de Coleção Queue
          *  é uma classe Generalizada e armazena os valores como object
          *  OBS: Não confundam classes Generalizadas com classes Genéricas
          */
     Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos &amp;amp;quot;);
 }
</pre>
<p>A saída vai ser essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg"><img class="aligncenter size-full wp-image-630" title="Queue" src="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg" alt="Queue" width="385" height="359" /></a></p>
<h2>Stack</h2>
<p>A classe Stack implementa o mecanismo LIFO (Last-In, First-Out, último a entrar é o primeiro a sair).</p>
<p>É como uma pilha de pratos, o último prato colocado é o primeiro a ser retirado da pilha =D</p>
<pre class="brush: csharp;">
Stack pilha = new Stack();

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

 foreach (int num in numeros)
 {
pilha.Push(num);
Console.WriteLine(num + &amp;amp;quot; &amp;amp;lt;- empilhamos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Pilha está assim: &amp;amp;quot;);

 // percorremos a pilha
 foreach (int numbs in pilha)
 {
Console.WriteLine(numbs);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);

 //esvaziamos a pilha
 while (pilha.Count &amp;amp;gt; 0)
 {
int number = (int)pilha.Pop();
Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos da Pilha&amp;amp;quot;);
 }
</pre>
<p>A saída será essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png"><img class="aligncenter size-full wp-image-632" title="stack" src="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png" alt="stack" width="393" height="299" /></a></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# Classe Coleção + ArrayList</title>
		<link>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/</link>
		<comments>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 01:28:46 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[boxing]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[Classe Coleção]]></category>
		<category><![CDATA[object]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=370</guid>
		<description><![CDATA[No meu último post, falamos sobre Arrays, agora você aprenderá o que é uma Classe de Coleção e qual a diferença entre ela e um Array. Classes de Coleção derivam do namespace System.Collection , visite Object Browser do Visual Studio 2008 &#8211; CTRL+ALT+J, que colecionam elementos só que de uma maneira muito especial. As classes]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>No meu último post, falamos sobre <em>Arrays</em>, agora você aprenderá o que é uma <strong><em>Classe de Coleção</em></strong> e qual a diferença entre ela e um <em>Array</em>. <strong></strong></p>
<p><strong>Classes de Coleção</strong> derivam do <strong>namespace</strong> <em>System.Collection</em> , visite <em>Object Browser</em> do <em>Visual Studio 2008</em> &#8211; <em>CTRL+ALT+J</em>, que colecionam elementos  só que de uma maneira muito especial.</p>
<p><span id="more-370"></span>As classes base de coleção armazenam e retornam seus elementos como umo bjetos (<em>object</em>), isso quer dizer que ao contrário de um <em>Array</em> convencional, que você pode criar ele do tipo <strong><em>int</em></strong> e os valores são armazenados diretamente como um <em>inteiro</em>. Uma classe de coleção os valores sofrerão <strong>boxing </strong>(explicarei em outro post) isso quer dizer que o valor não fica na <strong>pilha</strong> mas sim no <strong>heap</strong>, na <strong>pilha</strong> fica apenas um <em>alias</em> para o elemento no <strong>heap</strong>, deu pra entender?<br />
<strong></strong></p>
<p><strong>OBS</strong>: Existe classes de coleção que nem sempre usam <em>object</em> como tipo de elemento e que podem sim armazenar <em>tipo-valor</em> assim como <em>tipo-referência</em>, mas esse não é o nosso caso agora&#8230;</p>
<h2>ArrayList</h2>
<p><strong><em> ArrayList</em></strong> é muito bom para misturar elementos além de ter características que um <em>Array</em> comum não tem, exemplo:</p>
<ul>
<li> Para redimensionar um <em>Array</em>, você precisa criar um novo <em></em>maior copiar os elementos para esse novo <em>Array</em> ou se for no caso de diminuir criar um <em>Array</em> menor e omitir elementos.</li>
<li>Para adicionar um elemento ou remover você terá que redimensionar, em conclusões finais você terá que seguir a teoria do que foi dito acima.</li>
</ul>
<p>Com um <em><strong>ArrayList</strong></em> essa limitação acaba, para<em> remover</em>, <em>adicionar</em> e <em>inserir</em> nós usaremos <strong>métodos</strong>.</p>
<p>Veremos aqui alguns desses métodos e propriedades da classe de coleção <em><strong>ArrayList</strong></em>.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace ArrayList0
{
    class Program
    {
        static void Main(string[] args)
        {
            // Primeiro criamos o nosso objeto ArrayList chamado de meuAL
            ArrayList meuAL = new ArrayList();

            // Mostramos a capacidade do nosso ArrayList, nesse caso
            // não precisamos de parênteses () porque é uma propriedade
            // e não um método
            Console.WriteLine(&quot;1- O ArrayList.Capacity é {0} \n&quot;, meuAL.Capacity);

            // Populamos o nosso ArrayList
            Console.WriteLine(&quot;2- Populando ArrayList...&quot;);
            int z = 0;
            for (int i = 5; z &lt; i; i--)
            {
                // Repare que utilizamos um método
                // não atribuimos mais valor do elemento
                // ao indice como antes: meuAL[0] = valor
                meuAL.Add(i);
            }

            // Agora da pra perceber que a capacidade do ArrayList
            // aumentou dinâmicamente ao adicionar-mos elementos
            Console.WriteLine(&quot;\n3- O ArrayList.Capacity agora é: {0}\n&quot;, meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine(&quot;4- ArrayList.Count é: {0} \n&quot;, meuAL.Count);

            // Imprimimos os valores dos elementos na tela
            for (int y = 0; y &lt; meuAL.Count; y++)
            {
                try
                {
                    // Observe que é necessário fazer casting dos elementos
                    // isso porque os elementos armazenados no ArrayList
                    // são objetos, quando valores são inseridos com o método
                    // Add() ou Insert() eles sofrem boxing e são armazenados
                    // no heap e não na pilha
                    Console.WriteLine(&quot;O índice {0} = {1}&quot;, y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(&quot;\n\n Ops... Algo Errado Aconteceu!\n {0}&quot;, e);
                }
            }

            // Tiramos as Gorduras....
            meuAL.TrimToSize();
            Console.WriteLine(&quot;\n5- Tiramos as gorduras\n   Agora o ArrayList.Capacity é: {0}\n&quot;, meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine(&quot;6- ArrayList.Count ainda é: {0} \n&quot;, meuAL.Count);

            // Imprimimos os valores dos elementos na tela novamente
            for (int y = 0; y &lt; meuAL.Count; y++)
            {
                try
                {
                    Console.WriteLine(&quot;O índice {0} = {1}&quot;, y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(&quot;\n\n Ops... Algo Errado Aconteceu!\n {0}&quot;, e);
                }
            }
        } // END MAIN
    } // END CLASS PROGRAM
}// END NAMESPACE#
</pre>
<p>Esse foi só um exemplo! Se tiverem com tempo brinquem com o <em><strong>Object Browser</strong></em> e procurem saber como funciona os seguintes métodos, eles são bem interessantes&#8230;</p>
<ul>
<li><em>insert();</em></li>
<li><em>remove();</em></li>
<li><em>removeAt();</em></li>
<li><em>removeRange();</em></li>
<li><em>getRange();</em></li>
<li><em>toArray();</em></li>
<li><em>sort();</em></li>
<li><em>reverse();</em></li>
</ul>
<p style="text-align: center;"><a title="Clique para ampliar" href="http://diariodecodigos.info/wp-content/uploads/2009/08/snapshot-VisualObject.jpg" target="_blank"><img class="aligncenter size-full wp-image-371" src="http://diariodecodigos.info/wp-content/uploads/2009/08/snapshot-VisualObject.jpg" alt="Object Browser" width="614" height="432" /></a></p>
<p>Abraços&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C# Arrays</title>
		<link>http://diariodecodigos.info/2009/08/c-arrays/</link>
		<comments>http://diariodecodigos.info/2009/08/c-arrays/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 22:51:25 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Coleções]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=350</guid>
		<description><![CDATA[Usando Arrays com C#]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>Olá a todos,</p>
<p>é verdade depois de um tempo todo mundo aparece&#8230; fiquei sem fazer posts nesses últimos dias porque por enquanto eu trabalho com um chefe maluco que joga 3 projetos para eu Administrar, Programar, Criar a Modelagem e Colocar em Produção em apenas 1 mês!</p>
<p>Definitivamente acabou com minha vida, e pra completar vou ter que viajar pra Angola no dia 6 de setembro&#8230; é a vida, mas vamos ao que interessa&#8230; <strong>Arrays em C#</strong>!</p>
<p><span id="more-350"></span>Bem.. a maioria das pessoas que já desenvolveram podem pular esse paragrafo. O array nada mais é uma seqüência de elementos do mesmo tipo, esses elementos são acessados por um índice do tipo <em>int. </em></p>
<p>Em questão de memória <em>o Array </em>residem em um bloco contíguo da memória e são <a href="http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/" target="_blank">tipo-referência</a>, em questão de OO Array também é uma classe, como sempre volto a repetir.. quer saber mais sobre tal classe, interface e etc.? Procure no Object Browser no seu Visual Studio 2008 &#8220;CTRL+W, J&#8221;.</p>
<h2>Declarando e Instânciando Array</h2>
<p>A declaração de um array é feito especificando o nome do tipo de elemento seguido por um par de colchetes &#8220;[]&#8221; e o nome do próprio array:</p>
<pre class="brush: csharp;">
int[] motosID;
</pre>
<p>Como toda boa classe sem você instância-la você não faz nada! precisamos criar o objeto. Para instancia-lo utiliza-se a keyword <em>new</em> com o tipo do array seguido com o tamanho dentro de colchetes&#8230; Instanciar um array também inicializa seus valores padrões (0, null ou false dependendo do tipo do array)</p>
<pre class="brush: csharp;">
motosID = new int[9]; // instância o array motos com o tamanho 10 (os índices iniciam contando do 0)
/* Você também pode inicializar, instanciar e definir os valores ao mesmo tempo */
int[] motosID = { 10, 11, 12, 13, 14, 15, 16 };
</pre>
<p>Também é possível criar Arrays multidimensionais, mas esse não é o objetivo desse artigo.</p>
<p>Você também pode criar Arrays utilizando estruturas (structs) e classe como o tipo do Array.</p>
<pre class="brush: csharp;">
public class Moto{
// ...
    public Moto(){
        //Construtor padrão
    }
&lt;pre&gt;    public Moto(string nomeMoto){
        //Construtor com argumento
    }&lt;/pre&gt;
}

Moto[] intruder = new Moto[1] { new Moto(&quot;Intruder125cc&quot;), new Moto(&quot;Intruder250cc&quot;) };
/* Você pode usar o construtor da classe para iniciar os valores do array */
</pre>
<h2>Iniciando um Array sem Tipo</h2>
<p>Muitas vezes você não sabe qual vai ser o tipo do array à ser utilizado, porém você ainda precisa declara-lo&#8230; com isso o C# pode &#8220;adivinhar&#8221; o tipo dos valores que estão sendo utilizados.</p>
<pre class="brush: csharp;">
var carros = new[]{&quot;Palio&quot;, &quot;Siena&quot;, &quot;Punto&quot;};
</pre>
<p>As novidades aqui são: a palavra-chave &#8220;var&#8221;; a omissão dos colchetes após o tipo (porque não existe tipo aqui ao declarar); a utilização do operador <em>new</em> e os colchetes antes da lista inicializadora.</p>
<p>Para utilizar esse recurso infelizmente você tem que assegurar que todos os valores do array serão iguais se no exemplo acima se eu colocasse depois do punto um valor <em>int</em> você obteria um erro.</p>
<p>Caso os valores sejam compatíveis o compilador converte automaticamente os valores, exemplo:</p>
<pre class="brush: csharp;">
var numeros = new[]{5, 6, 7, 8, 9, 9.5, 9.6, 9.9, 10} // nesse caso o array não será int mas sim double
</pre>
<p>Talvez agora para você um array não tipado pode não ter muito sentido, eles são mais úteis utilizados em conjunto com tipos anônimos, mas isso é assunto para outro post.</p>
<h2>Acessando Elementos no Array</h2>
<p>Agora que já aprendemos a criar um array, precisamos recuperar os valores armazenados lá dentro.</p>
<pre class="brush: csharp;">
int[] numeros = {1, 2, 3, 4, 5};
Console.WriteLine(numeros[0]); // O valor 1 será impresso na sua tela
//vamos modificar o valor daquela posição do array
numeros[0] = 11;
Console.WriteLine(numeros[0]); // O valor 11 será impresso na sua tela
</pre>
<p>Como nós sabemos que pode exestir problemas como em qualquer ciração feita pelo ser humano, alguém pode requisitar um índice de acesso que não existe, para isso temos que tratar o erro:</p>
<pre class="brush: csharp;">
try{
    int[] numeros = {1, 2, 3, 4, 5};
    Console.WriteLine(numeros[5]);
} catch (IndexOutOfRangeException e){
 // código para  tratar o erro
}
</pre>
<p>Não só isso mas existe a necessidade também de percorremos um array inteiro, claro que para isso podemos utilizar o famoso FOR!!!</p>
<pre class="brush: csharp;">
int[] numeros = {5, 6, 7, 8, 9, 10,, 11, 12, 13, 14, 15};

for(int i = 0; i &lt; numeros.Length; i++){
int numero = numeros[i];
Console.WirteLine(numero);
}
</pre>
<p><em>Length</em> é uma propriedade e não um array, por isso não é utilizados colchetes &#8220;()&#8221; ao acessa-lo. Lembre-se que o índice do array começa com zero então a última posição é <em>Length &#8211; 1</em>. Você também pode utilizar o <em>foreach</em> para percorrer um elemento.</p>
<pre class="brush: csharp;">
int numeros = {5, 6, 7, 8, 9, 10,, 11, 12, 13, 14, 15};
foreach (int numero in numeros){
Console.WriteLine(numero);
}
</pre>
<p>O <em>foreach</em> declara uma variável de iteração (neste caso o inteiro <em>numero</em>) que recebe cada valor do Array <em>numeros</em> e executa as instruções seguintes, em primeira vista isso é maravilhoso para percorrer, mas infelizmente você fica limitado:</p>
<ol>
<li>Percorrer apenas em uma parte do Array, ou pular certos elementos. O <em>foreach</em> percorre ele todo obrigatóriamente</li>
<li>Percorrer o Array de trás para frente, o <em>foreach</em> percorre o Array sempre do <em>0</em> à <em>Lenght -1</em></li>
<li>Se o corpo do loop necessita saber o índice ao invéz do valor atual.</li>
<li>Se você precisar alterar o valor de um elemento no array também ficará limitado</li>
<li>Etc.</li>
</ol>
<h2>Copiando Arrays</h2>
<p>Como um array é um <em>tipo-referência</em> uma variável Array possui uma referência a uma instância do Array, isso quer dizer que ao copiar um Array você acaba copiando a referência e não o Array em si próprio.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosSegundo = inteiros;
</pre>
<p>O problema desse exemplo acima, é que se você modificar alguma valor no Array do <em>inteirosSegundo</em> você estará modificando o valor do Array ponteiros, e vice-versa&#8230;</p>
<p>Para copiar o Array é necessário criar outro Array do mesmo tipo e com o mesmo tamanho e criar um FOR para percorrer os valores do Array para o outro Array a ser copiado, exemplo:</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new  int[inteiros.Length];

for(int i = 0; i &lt; inteiros.Length; i++){
inteirosCopy[i] = inteiros[i];
}
</pre>
<p>O legal é que a classe <em>System.Array</em> nos fornece alguns métodos legal, e dentre elas é <em>CopyTo()</em> que copia os valores de um Array para outro partindo de um determinado índice.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new int[inteiros.Length];
inteiros.CopyTo(inteirosCopy, 0);
</pre>
<p>Um detalhe é que esse método é estático, então você pode utilizar esse método a partir da própria classe System.Array.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new int[inteiros.Length];
Array.CopyTo(inteiros, inteirosCopy, inteirosCopy.Length);
</pre>
<p>Para mais detalhes de uma olhada no Object Browser do seu Visual Studio.</p>
<p>Você também tem o método <em>Clone</em> no seu objeto de Array ele retorna um object, para copiar os valores é necessário fazer um <em>casting</em> (casting será abordado em outro post, aguardem)</p>
<p>Boa sorte!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/08/c-arrays/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

