0% acharam este documento útil (0 voto)
24 visualizações10 páginas

CSharp - Cap4

O capítulo descreve as coleções mais comuns no C#, incluindo arrays para armazenar um número fixo de itens e listas para armazenar vários itens do mesmo tipo. As arrays iniciam em 0 e seus valores são acessados via index, enquanto listas permitem adicionar e remover itens dinamicamente.

Enviado por

Gil Fraga
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
24 visualizações10 páginas

CSharp - Cap4

O capítulo descreve as coleções mais comuns no C#, incluindo arrays para armazenar um número fixo de itens e listas para armazenar vários itens do mesmo tipo. As arrays iniciam em 0 e seus valores são acessados via index, enquanto listas permitem adicionar e remover itens dinamicamente.

Enviado por

Gil Fraga
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 10

CAPÍTULO 4 - COLEÇÕES MAIS COMUNS

UTILIZADAS NO C#

Neste capítulo, veremos as coleções mais comuns utilizadas no


C#. As coleções nas linguagens de programação são basicamente
estruturas de dados que podemos criar ou gerenciar quando que-
remos definir objetos e utilizar os mesmos em nossos sistemas.
A ideia central de utilizar coleções em uma linguagem de progra-
mação é representar aspectos do mundo real no seu sistema. Por
exemplo, imaginemos que precisamos criar no sistema um controle
de senhas para gerenciar uma recepção de um consultório.

Neste consultório teremos apenas cem vagas disponíveis por


dia apenas. Como representaremos isso no sistema então? Preci-
saremos de uma coleção de um tipo de dados para gerenciar esse
controle de senhas. Como dito anteriormente, existem diversos ti-
pos de coleções e cada uma delas é adequada para um determina-
do cenário.

Sendo assim, veremos as principais coleções e como utilizá-las


no dia a dia de desenvolvimento de softwares.

ARRAYS

As arrays são normalmente utilizadas e criadas quando temos


um número fixo de posições em mente. Como no exemplo citado,
temos apenas cem senhas disponíveis, então podemos criar e de-
clarar o array da seguinte forma:
C# PARA INICIANTES

Declarando uma array com


cinco elementos do tipo inteiro
int[] primeiraArray = new int[100];

A declaração acima é bem simples, poderíamos guardar apenas


cem números do tipo inteiro nessa array. Perceba que estamos
apenas deixando disponível, mas não atribuindo os valores ao ar-
ray. Para o caso de já iniciar uma array com os valores atribuídos,
usamos:

// Declarando uma array e já atribuindo valores


int[] segundaArray = new int[] { 1, 3, 5, 7, 9 };

Veja acima que ao invés de informar para o C# que temos cem


posições de inteiros disponíveis, estamos apenas informando que
temos posições para alocar os números e já colocando os valores
diretamente na criação.

Paralelamente, se você não quiser informar o tipo (neste caso,


int), também é possível iniciar dessa forma:

// Forma alternativa de criar array


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

Essas formas de criação de array acima vão basicamente criar


o que chamamos de arrays dimensional. Teremos apenas uma di-
mensão para alocar e trabalhar com os valores.

Existe também uma forma de criar uma array multidimensional,


como se fosse uma matriz. Nesse caso, na criação da array, precisa-
mos informar na declaração, conforme exemplo:

// Declarando uma array multi-demensional


int[,] arrayMultiDimensional = new int[ 2, 3];

Esse seria um cenário um pouco mais avançado, mas ainda váli-


do. Para atribuir valores já na criação de uma array multidimensio-

88
CAPÍTULO 4 - COLEÇÕES MAIS COMUNS UTILIZADAS NO C#

nal, poderíamos fazer da seguinte forma:

// Declarando uma array multi-


demensional e atribuindo valores
[,] arrayMultiDimensional2 = { { 1, 2, 3 }, { 4, 5, 6 } };

Esse seria um cenário um pouco mais avançado, mas ainda váli-


do. Para atribuir valores já na criação de uma array multidimensio-
nal, poderíamos fazer da seguinte forma:

ACESSANDO O VALOR DE UMA ARRAY

Até aqui já criamos as arrays e atribuímos valores na sua cria-


ção. Porém, em um cenário real de desenvolvimento de softwares,
precisamos obter os valores que estão contidos nessas arrays para
exibir em alguma tela, por exemplo:

using System;

namespace livrocsharp  {     
    
    public class ExemploClasseArray 
    {         
    static void ClasseArray()
        {
            // Declarando uma array e já atribuindo 
valores
            int[] segundArray = new int[] { 1, 3, 5, 7, 9 };

                        Console.Write(“Valor  da  array  na  posição  0  -> 


{0}  “, segundArray[0]);
        }
    }
}

Esse código acima pode ser encontrado no projeto do Github,


dentro da pasta Cap4. A execução desse código vai retornar o se-
89
C# PARA INICIANTES

guinte resultado:

“Valor da array na posição 0 -> 1”

O motivo disso é porque quando vamos ler uma array, iniciamos


pelo indexador zero.

Figura 19 - Posição de uma array

Veja na figura anterior que o valor 1 está na posição 0. O valor


3 está na posição 1. O valor 5 está na posição 3 e assim por diante.
Em resumo, a posição de uma array inicia em zero e vai até o tama-
nho definido da array. Veja a lista completa como ficaria:

• Posição 0 - valor 1
• Posição 1 - valor 3
• Posição 2 - valor 5
• Posição 3 - valor 7
• Posição 4 - valor 9

Pode até parecer confuso, mas não é. O motivo de iniciar do zero


remete a forma como os computadores foram projetados e essa
convenção é adotada até hoje em estrutura de dados.

90
CAPÍTULO 4 - COLEÇÕES MAIS COMUNS UTILIZADAS NO C#

LISTAS

As listas no C# têm a finalidade de armazenar um tipo de dados


no sistema. Esses tipos de dados comumente são denominados
como listas tipadas. Ao se referir a “tipadas”, estamos meramente
informando ou entendendo que ao criar uma lista com um tipo de
dados, como por exemplo string, todos os valores daquela lista de-
vem ser de fato uma string. A tipagem garante que estamos traba-
lhando de forma efetiva e não estamos misturando tipos de dados
diferentes na mesma coleção.

As listas são utilizadas normalmente em cenários onde mais de


um valor deve ser associado a uma variável. Pense num cenário
onde precisamos criar uma estrutura de dados para salvar o nome
de todos os funcionários de um determinado departamento de
uma empresa. Nesse departamento temos a Maria, o João, o André
e a Flávia. Dessa forma, precisaremos criar uma estrutura de dados
do tipo List<T> para acrescentar os nomes e manipular essa estru-
tura de dados, conforme exemplo a seguir:

using System;
using System.Collections.Generic;

namespace livrocsharp  {     
    
    public class ExemploList 
    {         
    static void Testa()
        {
                        List<string>  nomesFuncionarios  =  new  List< s
tring>();

            nomesFuncionarios.Add(“ Maria”);
            nomesFuncionarios.Add(“João”);
            nomesFuncionarios.Add(“ André”);
            nomesFuncionarios.Add(“Flávia”);
            

91
C# PARA INICIANTES

            Console.WriteLine();
            foreach(string pessoa in nomesFuncionarios)
            {
                 Console.WriteLine(pessoa);
            }

//Console. WriteLine(nomesFuncionarios[0]);
        }
    }
}

O resultado desse processamento será o seguinte:

Output:
Maria
João
André
Flávia

A seguir, vamos analisar em detalhes o que fizemos. Criamos


uma instância de uma lista de funcionários utilizando o List<string>.

List<string>  nomesFuncionarios = new List<string>();

Dessa forma, estamos criando na memória uma estrutura para


guardar uma lista do tipo string. Se tentarmos incluir nessa lista um
valor inteiro, por exemplo 0 ou 1, não será possível, pois ela foi ti-
pada com o tipo string.

Por se tratar de uma lista, podemos manipular os valores da


mesma, acrescentando ou removendo valores. Para isso temos o
método Add() que vai possibilitar incluir uma nova string nessa lista,
conforme o exemplo a seguir:

nomesFuncionarios. Add(“Maria”);

92
CAPÍTULO 4 - COLEÇÕES MAIS COMUNS UTILIZADAS NO C#

nomesFuncionarios. Add(“João”);
nomesFuncionarios. Add(“André”);
nomesFuncionarios.Add(“Flávia”);

A forma como a lista é indexada, ou seja, seus valores são de-


terminados e iniciando em 0, então, se tentarmos obter o primeiro
valor da lista, precisamos programar da seguinte forma:

Console. WriteLine(nomesFuncionarios[ 0]);

A saída desse processamento será “Maria” pois Maria é o primei-


ro valor que foi adicionado na lista.

Podemos ter cenários onde será necessário remover pessoas da


lista. Nesse caso temos o método RemoveAt() se soubermos qual a
posição exata da pessoa na lista. No exemplo a seguir vamos remo-
ver a Maria novamente da lista e já sabemos que ela é a primeira
da lista, sendo assim a posição dela é 0. Podemos fazer da seguinte
maneira:

using System;
using System.Collections. Generic ;

namespace livrocsharp  {     
    
    public class ExemploList 
    {         
    static void Testa()
        {
                        List<string>  nomesFuncionarios  =  new  List< s
tring>();

            nomesFuncionarios.Add(“Maria”);
            nomesFuncionarios.Add(“João”);
            nomesFuncionarios.Add(“André”);
            nomesFuncionarios.Add(“Flávia”);

93
C# PARA INICIANTES

            
            Console.WriteLine();
                        //  foreach(string  pessoa  in  nomesFuncionari
os)
            // {
            //     Console.WriteLine(pessoa);
            // }

            //Console.WriteLine(nomesFuncionarios[0]);
            //removendo Maria da lista
            nomesFuncionarios.RemoveAt(0);
            Console.WriteLine(nomesFuncionarios[ 0]);
        }
    }
}

O resultado final do processamento acima será:

João

Esse resultado foi executado pois acrescentamos os quatros


nome na lista, mas em seguida fizemos a remoção do indexador
zero, o qual representava o valor Maria. Sendo assim, havia quatro
nomes na lista e removemos o primeiro. Nesse mesmo momento,
João passou a ser o indexador zero que anteriormente estava ocu-
pado por Maria.

Esse tipo de manipulação de dados é muito comum e corriquei-


ro no desenvolvimento de softwares. As manipulações de dados e
estrutura de dados representam boa parte do cotidiano de um de
uma pessoa desenvolvedora de softwares.

TIPOS GENÉRICOS

Nos exemplos anteriores fixamos que a lista era do tipo string.


Esse é um bom cenário quando temos certeza que os tipos de va-
lores são exatamente os que precisaremos para trabalhar. Porém,

94
CAPÍTULO 4 - COLEÇÕES MAIS COMUNS UTILIZADAS NO C#

em algumas situações precisaremos flexibilizar essa tipagem dos


valores.

Imaginemos um cenário onde precisamos colocar em uma mes-


ma lista valores inteiros e letras, ou melhor, criar uma lista apenas
de inteiro e outra apenas de letras. Nesse caso, o C# tem disponível
o conceito de genéricos.

Os tipos genéricos facilitam esse cenário e tudo que precisamos


fazer é utilizar parâmetros do tipo genérico T. Podemos então es-
crever uma única classe que qualquer outra parte do sistema pode
utilizar sem precisar criar uma nova estrutura e passando o tipo
específico que ela deseja.

Para ficar mais claro, vamos utilizar o seguinte exemplo. Imagi-


namos que queremos criar uma classe que vai possibilitar a criação
de várias listas de qualquer tipo, ou seja, strings, inteiro ou até mes-
mo de outra classe. Nesse cenário, seria mais produtivo criarmos
uma classe genérica que nos possibilite passar como parâmetro um
tipo qualquer. Veja o exemplo de código:

using System;

namespace livrocsharp {     
    
    // Declarando uma classe genérica
    public class ListaGenerica<T>
    {
        public void Adicionar(T inpu t) { }
    }
    class TestListaGenerica
    {
        private class ExampleClass { }
        static void Testa()
        {
            // Declarando uma lista d o tipo inteiro
                        ListaGenerica<int>  lista1  =  new  ListaGeneric

95
C# PARA INICIANTES

a<int>();
            lista1.Adicionar( 1);

            // Declarando uma lista d o tipo string
                        ListaGenerica<string>  lista2  =  new  ListaGene
rica<string>();
            lista2.Adicionar(“”);

            /// Declarando uma lista do tipo de uma 
classe
                        ListaGenerica<ExampleClass>  lista3  =  new  Li
staGenerica<ExampleClass>();
            lista3.Adicionar(new ExampleClass());
        }
    }
}

Os tipos genéricos facilitam criar as estruturas de dados de uma


forma dinâmica, facilitando a centralização e reaproveitamento de
código. No exemplo anterior, a classe ListaGenerica<T> assume essa
responsabilidade de flexibilizar a tipagem de dados utilizando o pa-
râmetro <T>. Dessa forma, podemos passar qualquer tipagem de
dados e utilizar essa classe em qualquer local do sistema de forma
centralizada.

96

Você também pode gostar