1
resposta

[Projeto] Organizando elementos únicos

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 scoresOrdenados = new List<int>(scores);
scoresOrdenados.Sort();

Console.WriteLine("Scores em ordem crescente:");
foreach (int score in scoresOrdenados)
{
    Console.WriteLine(score);
}
1 resposta

Olá, Eduardo. Como vai?

Excelente código! Sua implementação está perfeita e toca em um dos conceitos mais importantes quando falamos de coleções: a diferença entre conjuntos de elementos únicos e coleções ordenadas.

Você utilizou o HashSet<int> de forma brilhante para barrar as duplicatas (os valores 150 e 200 adicionados repetidamente foram ignorados de forma automática e transparente). Logo depois, fez a conversão correta para List<int> para conseguir aplicar o método .Sort(), já que os HashSets nativos não possuem um índice definido e não garantem nenhuma ordenação.

Para enriquecer o seu projeto e expandir os seus conhecimentos sobre manipulação de conjuntos no C#, separei duas abordagens alternativas que são amplamente utilizadas no mercado para atingir esse mesmo resultado:


1. A Solução Direta com SortedSet<T>

Se o objetivo do seu projeto for manter elementos únicos e garantir que eles fiquem sempre ordenados de forma automática (sem que você precise criar uma nova lista e chamar o método .Sort() manualmente), o .NET possui uma coleção nativa perfeita para isso chamada SortedSet<T>.

Toda vez que você adiciona um item nele, ele faz a validação de duplicidade e o insere na posição correta usando uma estrutura de árvore binária nos bastidores:

// Cria o conjunto que barra duplicados e ordena automaticamente
var scoresSorted = new SortedSet<int> { 150, 90, 200, 120, 150, 80, 180, 200 };

Console.WriteLine("Scores ordenados automaticamente pelo SortedSet:");
foreach (int score in scoresSorted)
{
    Console.WriteLine(score); // Já sairá em ordem crescente
}

2. Resolvendo com LINQ em uma Linha

Como você já usou o LINQ em outros exercícios, vale destacar que ele simplifica drasticamente esse fluxo de conversão e ordenação. Você pode manter o seu HashSet original intocado e gerar a exibição ordenada diretamente usando o método .OrderBy():

using System.Linq;

// Ordena os elementos do seu HashSet original para a leitura
foreach (int score in scores.OrderBy(x => x))
{
    Console.WriteLine(score);
}

Parabéns por mais essa entrega impecável! Você está construindo uma base extremamente sólida sobre o funcionamento interno das estruturas de dados no C#.

Espero que possa ter lhe ajudado!