Entendendo Arrays em C#
Em C#, os arrays são uma estrutura de dados fundamental que permite aos desenvolvedores armazenar uma coleção de elementos do mesmo tipo em locais de memória contíguos. Os arrays podem ser unidimensionais, multidimensionais ou irregulares.
Este artigo sobre arrays em C# foi inspirado no vídeo educativo de Layla Porter, " C# para Iniciantes Parte 5 - Arrays e Mais Loops". Em seu vídeo, Layla explora os fundamentos de arrays e apresenta mais técnicas de loops em C#, capacitando os espectadores com habilidades essenciais para gerenciar coleções e iterar sobre dados de forma eficaz.
Entendendo Matrizes
Layla começa explicando que arrays são coleções de tamanho fixo em C#. Diferentemente de algumas outras linguagens de programação em que os arrays podem ter seu tamanho alterado dinamicamente, os arrays em C# são imutáveis após serem criados. Isso significa que seu tamanho não pode ser alterado após a inicialização devido a restrições de alocação de memória.
Interação simples com o console: escolha seu queijo favorito
No código a seguir, em contraste com os arrays, Layla (1:50) primeiro demonstra como um usuário pode ser apresentado a uma lista de itens a partir dos quais ele pode escolher.
Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Este código primeiro usa Console.WriteLine para imprimir uma mensagem no console que pergunta ao usuário qual é o seu queijo favorito. Em seguida, usa Console.WriteLine mais quatro vezes para imprimir uma lista de queijos no console. O código então usa Console.ReadLine para ler a entrada do usuário do console e a armazena na variável favouriteCheese. Finalmente, o código usa Console.WriteLine novamente para imprimir uma mensagem no console que inclui o queijo favorito do usuário.
Layla, às 2h04, executa este código para mostrar como funciona:

Declaração de um Array - Inicialização de Array
Para ilustrar, Layla começa demonstrando como declarar e inicializar um array de strings, neste caso, uma lista de queijos que foram inicialmente apresentados ao usuário como um menu. Ela apresenta a sintaxe para definir uma matriz unidimensional (2:30) e preenchê-la com valores iniciais usando chaves (2:54).
string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };
string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };
Ela enfatiza a importância da indexação baseada em zero em arrays, onde o primeiro elemento em um array unidimensional é acessado usando o índice 0. Layla então demonstra como iterar sobre arrays usando um laço for. Essa estrutura de laço é fundamental em programação, pois permite a execução repetitiva de código com base em uma condição específica.
Implementando Loops
Passando para os loops, Layla apresenta o loop for com seus três componentes essenciais: inicializador, condição e iterador. Este laço é usado para iterar pelos elementos de uma matriz com base em seu comprimento.
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(cheeses[i]);
}
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(cheeses[i]);
}
Ela, às 4:44, enfatiza que cheeses.Length fornece o número de elementos no array, garantindo que o loop itere precisamente por cada elemento. A variável i funciona como uma variável de índice para iterar através dos índices. Isso efetivamente imprime os elementos individuais do array sem escrever o método Console.WriteLine várias vezes como mostrado acima sem acessar elementos do array. Layla, às 6h17, executa o aplicativo para mostrar que a saída deste loop for é exatamente a mesma do exemplo anterior:

Classificação e mutabilidade
Layla explica o benefício da ordenação, e então às 7:17, ela demonstra a ordenação de um array alfabeticamente usando o método Sort, alertando que a ordenação na verdade cria um novo array nos bastidores devido à imutabilidade dos arrays em C#. Este é um ponto crucial para entender como a manipulação de dados afeta a memória e o desempenho.
Array.Sort(cheeses);
Array.Sort(cheeses);
Ela também mostra como elementos individuais dentro da matriz podem ser modificados diretamente sem criar uma nova matriz (8:10), ilustrando a mutabilidade dentro da imutabilidade. O índice do elemento a ser substituído é passado entre colchetes após a variável cheeses do array:
cheeses[0] = "Roquefort";
cheeses[0] = "Roquefort";
Isso substituirá o elemento "Brie" no índice 0 do array pelo novo valor "Roquefort".
Atualizando a lista de queijos: Lidando com novas entradas (8:46)
Layla explica como podemos adicionar valores a uma lista existente. Isso envolve pegar os valores existentes e o novo valor, criar um novo array que inclua ambos e atualizar nossa referência para apontar para esse novo array. O código a seguir demonstra como funciona:
var favouriteCheese = Console.ReadLine();
bool containsFavourite = false;
foreach (var cheese in cheeses)
{
if (favouriteCheese == cheese)
{
containsFavourite = true;
}
}
if (!containsFavourite)
{
cheeses = cheeses.Append(favouriteCheese).ToArray();
}
var favouriteCheese = Console.ReadLine();
bool containsFavourite = false;
foreach (var cheese in cheeses)
{
if (favouriteCheese == cheese)
{
containsFavourite = true;
}
}
if (!containsFavourite)
{
cheeses = cheeses.Append(favouriteCheese).ToArray();
}
Este exemplo mostra o processo de uma maneira simples usando operações básicas de array e um loop foreach para verificar se o queijo já está na lista. Se não estiver, Layla o adiciona (13:33) ao array usando o método Append de System.Linq.
Layla, às 13:50, diz que o código apresenta erros porque cheeses e o resultado de Append são tipos diferentes. Append retorna um IEnumerable, uma interface para coleções. Para corrigir isso, convertamos o IEnumerable em um array usando o método ToArray() e então o atribuamos de volta a cheeses. Layla observa que a linha ondulada amarela é um aviso do compilador indicando problemas potenciais, como favouriteCheese ser nulo, mas estamos ignorando verificações de segurança nesta demonstração.
Atualizando e imprimindo a lista de queijos
Layla explica que, depois de adicionarmos um novo item à nossa matriz, devemos imprimir a lista atualizada na tela. Para conseguir isso, usamos um loop for, imprimindo cada elemento junto com seu índice para mostrar que o array agora contém mais itens.
Console.WriteLine("The new list:");
for (var i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(i + " " + cheeses[i]);
}
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("The new list:");
for (var i = 0; i < cheeses.Length; i++)
{
Console.WriteLine(i + " " + cheeses[i]);
}
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Isso demonstra a natureza dinâmica dos arrays em C#, mostrando como adicionar novos elementos e verificar a atualização imprimindo o conteúdo do array.
Layla então executa o aplicativo para exibir o queijo recém-adicionado (15:19):

Aprimorando com Matrizes de Objetos
Para ampliar o entendimento, Layla introduz arrays de objetos criando uma classe Cheese com propriedades para Name e Strength (16:14). Ela então substitui a lista de strings para criar um array de objetos Cheese e demonstra como acessar propriedades dentro dos objetos durante a iteração (17:46).
class Cheese
{
public string Name { get; set; }
public int Strength { get; set; }
public Cheese(string name, int strength)
{
Name = name;
Strength = strength;
}
}
Cheese[] cheeses = new Cheese[]
{
new Cheese("Stilton", 3),
new Cheese("Cheddar", 2),
new Cheese("Pineapple", 1),
new Cheese("Brie", 2)
};
cheeses[0] = new Cheese("Roquefort", 4);
class Cheese
{
public string Name { get; set; }
public int Strength { get; set; }
public Cheese(string name, int strength)
{
Name = name;
Strength = strength;
}
}
Cheese[] cheeses = new Cheese[]
{
new Cheese("Stilton", 3),
new Cheese("Cheddar", 2),
new Cheese("Pineapple", 1),
new Cheese("Brie", 2)
};
cheeses[0] = new Cheese("Roquefort", 4);
Este segmento fornece uma compreensão fundamental de como os arrays podem encapsular estruturas de dados complexas, oferecendo flexibilidade e poder na programação.
Utilizando o objeto Cheese em loops
Layla agora mostra como imprimir todos os elementos da lista atualizada na tela. Neste cenário, cada queijo é representado como um objeto com propriedades Name e Strength. O loop for itera através deste array de objetos Cheese onde cada iteração lida diretamente com um único elemento do array.
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}
for (int i = 0; i < cheeses.Length; i++)
{
Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}
Este loop simplifica o acesso às propriedades de objetos Cheese armazenados no array cheeses. Layla, às 20h34, executa o programa e a saída é a seguinte:

Conclusão
Em conclusão, o tutorial de Layla Porter sobre arrays e loops em C# fornece uma base sólida para iniciantes compreenderem esses conceitos essenciais. Ao dominar arrays e várias estruturas de loop, os aspirantes a desenvolvedores C# podem manipular estruturas de dados e iterar por coleções em seus programas de forma eficaz. Compreender esses fundamentos é crucial para construir aplicações mais complexas e explorar outros aspectos da programação em C#.
Seguindo os exemplos e explicações de Layla, os iniciantes podem ganhar confiança no uso eficaz de arrays e loops em seus próprios projetos em C#. Para um conteúdo mais aprofundado sobre coleções em C# e arrays bidimensionais e irregulares avançados, os alunos são encorajados a explorar os tutoriais e exercícios práticos subsequentes.



