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!