1
resposta

Organizando elementos únicos

Para essa solução, analisei os requisitos e verifiquei que, para garantir a unicidade dos valores, o tipo de coleção mais adequado seria o HashSet, devido à sua característica de impedir elementos duplicados. Todavia, como o HashSet não é indexado nem possui ordenação, decidi converter seus valores para uma lista utilizando o método de extensão ToList(). Dessa forma, foi possível manipular e exibir os valores da maneira desejada:

var scores = new HashSet<int>();

scores.Add(150);
scores.Add(90);
scores.Add(200);
scores.Add(120);
scores.Add(150);
scores.Add(80);
scores.Add(180);
scores.Add(200);

var listaScores = new List<int>();
listaScores = scores.ToList();
listaScores.Sort();

foreach (var score in listaScores) {
    Console.WriteLine(score);
}
1 resposta

Olá, Diego. Como vai?

Excelente escolha ao optar pelo HashSet<int> para resolver esse problema. Quando o requisito principal é garantir a unicidade dos elementos de forma performática, ele é de fato a melhor estrutura de dados no C#, pois suas operações de inserção possuem complexidade de tempo constante, ou seja, O(1).

Sua estratégia de converter o conjunto para uma lista usando o ToList() para poder aplicar a ordenação com o Sort() funciona perfeitamente e é muito utilizada.

Para agregar ainda mais valor ao seu aprendizado, trago duas alternativas que podem deixar seu código ainda mais enxuto e elegante, explorando recursos nativos do ecossistema .NET:

1. Inicialização e Conversão Direta com LINQ
Você pode reduzir a quantidade de linhas de código combinando o LINQ e simplificando a inicialização do HashSet. Em vez de instanciar a lista vazia e depois atribuir o valor, você pode ordenar e converter em uma única linha usando OrderBy:

var scores = new HashSet<int> { 150, 90, 200, 120, 150, 80, 180, 200 };

// O OrderBy já ordena e o ToList cria a lista em sequência
var listaScores = scores.OrderBy(s => s).ToList();

foreach (var score in listaScores) {
    Console.WriteLine(score);
}

2. Utilizando SortedSet (A Coleção Nativa Ordenada)
Caso você precise de uma estrutura que garanta a unicidade e, ao mesmo tempo, mantenha os elementos sempre ordenados automaticamente a cada inserção, o C# possui o SortedSet<T>.

Ao utilizá-lo, você elimina totalmente a necessidade de converter para lista e chamar um método de ordenação:

// O SortedSet não aceita duplicados e se auto-ordena na inserção
var scores = new SortedSet<int> { 150, 90, 200, 120, 150, 80, 180, 200 };

foreach (var score in scores) {
    Console.WriteLine(score);
}

Nota de boa prática: O SortedSet utiliza uma árvore binária por baixo dos panos, o que faz com que a inserção seja um pouco mais lenta (O(log n)) que o HashSet (O(1)). Portanto, a sua abordagem atual (HashSet + ToList + Sort) ainda é excelente se você tiver um volume massivo de dados e só precisar ordenar no final da execução. Se a coleção for menor ou consultada ordenadamente o tempo todo, o SortedSet limpa bastante o código.

Parabéns pela dedicação nos exercícios e pela estrutura do raciocínio lógico!

Espero que possa ter lhe ajudado!