Olá, fiz a resolução do desafio 2 utilizando dicionário, achei que seria mais fácil e eficiente. No entanto, na prática tive um pouco de dificuldade em mostrar o nome do tom, e meu código parece que ficou um pouco maior que o da resolução. Analisando o meu código, há algo que eu fiz a mais, ou que pode ser simplificado, ainda utilizando dicionário?
Program.cs
LinqFilters.FiltrarMusicasPorTonalidade(musicas, 1); // 1 = C#
Musica.cs
[JsonPropertyName("key")]
public int Key { get; set; }
private Dictionary<int, string> notas = new Dictionary<int, string>
{
{ 0, "C" },
{ 1, "C#" },
{ 2, "D" },
{ 3, "D#" },
{ 4, "E" },
{ 5, "F" },
{ 6, "F#" },
{ 7, "G" },
{ 8, "G#" },
{ 9, "A" },
{ 10, "A#" },
{ 11, "B" }
};
public string Nota
{
get
{
if (notas.TryGetValue(Key, out string? value))
{
return value;
}
else
{
return "Nota inválida";
}
}
}
LinqFilters.cs
public static void FiltrarMusicasPorTonalidade(List<Musica> musicas, int nota)
{
var tonalidade = musicas.Where(m => m.Key.Equals(nota)).Select(m => m.Nota).Distinct().ToList();
var musicasTonalidade = musicas.Where(m => m.Key.Equals(nota)).OrderBy(m => m.Nome).ThenBy(m => m.Artista).Select(m => m.Nome).Distinct().ToList();
Console.WriteLine($"Músicas da tonalidade {tonalidade[0]}:\n");
foreach (var musica in musicasTonalidade)
{
Console.WriteLine($"- {musica}");
}
Console.WriteLine();
}