1
resposta

[Projeto] Manipulando Listas

List<string> nomes = new List<string> { "Ana", "Carlos", "Mariana", "João", "Lúcia" };

    Console.WriteLine("\nLista original:");
    Console.WriteLine(string.Join(", ", nomes));

    nomes.Sort();

    Console.WriteLine("\nApós Sort (ordem alfabética):");
    Console.WriteLine(string.Join(", ", nomes));

    nomes.Reverse();

    Console.WriteLine("\nApós Reverse (ordem invertida):");
    Console.WriteLine(string.Join(", ", nomes));

    var primeiroNome = nomes[0];
    nomes.Remove(primeiroNome);
    nomes.Add(primeiroNome);

    Console.WriteLine("\nApós remover o primeiro e adicioná-lo no fim:");
    Console.WriteLine(string.Join(", ", nomes));

    Console.WriteLine($"\nA pessoa sorteada foi: {nomes[3]}");
1 resposta

Olá, Eduardo. Como vai?

Excelente código! Sua manipulação da classe List<string> em C# ficou fantástica. Você explorou muito bem métodos essenciais do ecossistema de coleções, como o Sort() para ordenação, o Reverse() para inversão e o método utilitário string.Join(), que é a melhor prática para exibir coleções formatadas em uma única linha de texto sem a necessidade de abrir um laço de repetição inteiro apenas para isso.

A sua lógica de capturar o primeiro elemento, removê-lo e inseri-lo no final da lista também funcionou perfeitamente.

Para agregar ainda mais valor aos seus estudos sobre manipulação de estruturas indexadas, separei duas dicas técnicas fundamentais sobre o comportamento interno desses métodos:


1. Cuidados com o método Reverse()

Um detalhe muito importante que confunde muitos desenvolvedores no início é a diferença entre inverter e ordenar de forma decrescente.

O método .Reverse() apenas espelha a ordem atual da lista, independentemente de qual seja essa ordem. No seu código, o resultado ficou em ordem alfabética decrescente (Z-A) apenas porque você executou o .Sort() imediatamente antes.

Se você utilizasse o .Reverse() na lista original (sem o Sort), os nomes seriam exibidos na ordem de trás para frente do cadastro inicial: "Lúcia", "João", "Mariana", "Carlos", "Ana".


2. Otimizando a rotação de elementos

A sua lógica de mover o primeiro elemento para o final (Remove seguido de Add) é totalmente válida. Em listas muito grandes, contudo, o método .Remove(valor) faz uma busca linear interna para encontrar o item antes de deletá-lo.

Como você já guardou o elemento e sabe exatamente que ele está no índice zero, uma boa prática de performance é remover diretamente pelo índice usando o .RemoveAt(0):

var primeiroNome = nomes[0];
nomes.RemoveAt(0); // Remove diretamente pela posição, sendo mais performático
nomes.Add(primeiroNome);

3. Evitando erros no sorteio (Índice Fixo vs Dinâmico)

Na última linha, você exibiu o ganhador acessando diretamente um índice fixo: nomes[3].

Para transformar o seu script em um sistema de sorteio real e dinâmico, você pode utilizar a classe Random do C#. Dessa forma, o índice sorteado muda a cada execução do programa e se adapta de forma automática ao tamanho da lista:

Random random = new Random();
int indiceSorteado = random.Next(nomes.Count); // Sorteia um índice válido de 0 até o total de itens

Console.WriteLine($"\nA pessoa sorteada de forma aleatória foi: {nomes[indiceSorteado]}");

Parabéns por mais essa entrega impecável e por explorar tão a fundo os métodos nativos das listas em C#!

Espero que possa ter lhe ajudado!