- 7.01 Introdução
- 7.02 Array
- 7.03 Declarando e Alocando Arrays
- 7.04 Exemplos Usando Arrays
- 7.05 Passando Arrays a Métodos
- 7.06 Passando Arrays por Valor e por Referência
- 7.07 Ordenando Arrays
- 7.08 Pesquisando Arrays: Pesquisa linear e pesquisa binária
- 7.09 Arrays Multidimensionais
- 7.10 Estrutura de Repetição foreach
Este capítulo serve como uma introdução às estruturas de dados. Os arrays são estruturas de dados que consistem em itens de dados do mesmo tipo. Os arrays são entidades "estáticas", pois, uma vez criados, eles permanecem do mesmo tamanho.
Um array é um grupo de posições de memória adjacentes que têm o mesmo nome e tipo. Para nos referimos a uma posição ou elemento particular no array, especificamos o nome do array e o número da posição do elemento ao qual nos referimos.
O número da posição entre colchetes é chamado mais formalmente de índice. Um índice deve ser um inteiro ou uma expressão inteira.
Os arrays ocupam espaço na memória. O programador especifica o tipo dos elementos
e usa o operador new para alocar dinamicamente o número de elementos exigidos por cada array.
Os arrays são alocados com new porque são objetos, e todos os objetos dever ser criados com new.
A declaração
int[] c = new int[12];aloca 12 elementos para o array inteiro c. A instrução também pode ser executada em dois passos, como segue:
int[] c;
c = new int[12];Quando os arrays são alocados, os elementos são inicializados como zero para as variáveis numéricas de tipo de dados primitivo, como false para variáveis bool, e como null para tipos de referência.
string[] b = new string[100], x = new string[27];
double[] array1 = new double[10],
array1 = new double[20];Esta apresenta vários exemplos usando arrays. Por simplicidade, os exemplos desta seção usam arrays que contêm elementos do tipo int.
- Fig. 7.03: InitArray.cs
Diferentes maneiras de inicializar arrays.
- Fig. 7.04: SumArray.cs
Calculando a soma dos elementos em um array.
- Fig. 7.05: Histogram.cs
Usando dados para criar um Histograma.
- Fig. 7.06: RollDie.cs
Lançamento de 12 dados.
- Fig. 7.05: StudentPoll.cs
Um programa de pesquisa de alunos.
Para passar um argumento array para um método, especifique o nome do array sem usar colchetes.
- Fig. 7.08: PassArray.cs
Passando arrays e elementos individuais a métodos.
Em C#, uma variável que "armazena" um objeto, como um array, não armazena realmente o objeto em si. Em vez disso, tal variável armazena uma referência para o objeto. A distinção entre variáveis de referência e variáveis de tipo de dados primitivo levanta alguns problemas sutis que os programadores devem entender para criar programas seguros e estáveis.
- Fig. 7.09: ArrayReferenceTest.cs
Testando os efeitos da passagem de referência de array por valor e por referência.
Ordenar dados é uma das aplicações mais importantes da computação. Ordenar dados é um problema intrigante que tem atraído alguns dos esforços de pesquisa mais intensos no setor da ciência da computação
- Fig. 7.10: BubbleSorter.cs
Ordenando os valores de um array em ordem crescente.
A vantagem da ordenação "bolha" é que ela é fácil de programar. Entretanto, a ordenação "bolha" é executada lentamente, o que se torna aparente na ordenação de arrays grandes.
(Bom para pesquisar: Estruturas de Dados, Algoritmos e Complexidade Computacional)
Determinar se um array contém um valor que corresponde a determinado valor de chave. O processo de localizar um valor de elemento em particular em um array é chamado de pesquisa. Nesta seção discutiremos duas técnicas de pesquisa.
- Fig. 7.11: LinearSearcher.cs
Demonstrando a pesquisa linear de um array.
O método de pesquisa linear funciona bem para array pequenos ou não ordenados. Entretanto, para arrays grandes, a pesquisa linear é ineficiente. Se o array estiver ordenado, a técnica de pesquisa binária de alta velocidade pode ser usada. O algoritmo de pesquisa binária elimina metade dos elementos do array que está sendo pesquisado, após cada comparação. O algoritmo localiza o elemento do meio do array e o compara com a chave de busca.
- Fig. 7.12: BinarySearchTest.cs
Demonstrando uma pesquisa binária de um array.
Os arrays que exigem dois índices para identificar um elemento em particular normalmente são chamados de arrays bidimensionais. Existe dois tipos de arrays bidimensionais (retangulares e irregulares).
Os arrays multidimensionais podem ser inicializado em declarações como os arrays de um índice. Um array bidimensional b, com duas linhas e duas colunas, poderia ser declarado em inicializado com
int[,] b = new int[2, 2];ou poderia ser escrito em uma única linha usando-se uma lista inicializadora, como se vê a seguir:
int[,] b = {{1, 2}, {3, 4}};Os arrays irregulares são mantidos como arrays de arrays. Ao contrário dos arrays retangulares, os arrays que compõem os arrays irregulares pode ser de tamanhos diferentes. A declaração
int[][] c = new int[2][]; // Aloca linhas.
// Aloca e inicializa elementos na linha 0.
c[0] = new int[] {1, 2};
// Aloca e inicializa elementos na linha 0.
c[1] = new int[] {3, 4, 5};cria o array inteiro c com a linha 0 contendo dois elementos, e a linha 1 contendo três elementos.
-
Fig. 7.14: TwoDimensionalArrays.cs
Inicializando arrays bidimensionais. -
Fig. 7.15: DoubleArray.cs
Manipulando um array bidimensional. -
Fig. 7.16: ForEach.cs
Demonstrando a estrutura for/each;
O C# fornece a estrutura de repetição foreach para se fazer a iteração por valores em estruturas de dados, como arrays. Quando usado com arrays unidimensionais, foreach se comporta como estrutura for que percorre o intervalo de índices de de 0 ao tamanho do array. Em vez de um contador, foreach usa uma variável para representar o valor de cada elemento.