2
respostas

Sugestão utilizando Dictionary<TKey, TValue>

Olá, boa tarde; Venho apresentar a maneira que utilizei para fazer o exercício/desafio que aparentemente foi diferente dos demais alunos.

Dictionary<int, string> keys= new()
{
    {0, "C"},{1, "C#"},{2, "D"}, {3, "D#"},{4, "E"},{5, "F"},{6, "F#"},{7, "G"},{8, "G#"},{9, "A"},{10, "A#"},{11, "B"}
};

[JsonPropertyName("key")]
public int Key { get; set; }

public void ExibirDetelhes()
{
    Console.WriteLine($"Artista: {Artista}");
    Console.WriteLine($"Música: {Nome}");
    Console.WriteLine($"Gênero: {Genero}");
    Console.WriteLine($"Duração em minutos: {Math.Round(Duracao / 1000 / 60, 2)}");
    if (keys.ContainsKey(Key))
    {
        Console.WriteLine($"Tonalidade: {keys[Key]}");
    }
}
2 respostas

Olá, Luis! Bom dia!

Gostei muito da sua abordagem para resolver o desafio utilizando o Dictionary<int, string>. É uma forma bem interessante e prática de mapear as tonalidades musicais. Vou aproveitar para te dar uma sugestão que pode deixar o seu código ainda mais organizado e eficiente.

Você já está utilizando um Dictionary para mapear as tonalidades, então podemos simplificar a sua classe Musica um pouco mais. Vou te mostrar como:

  1. Remover a necessidade de um array de tonalidades: Como você já tem o Dictionary, não precisa de um array separado para as tonalidades.
  2. Utilizar a propriedade Key diretamente no Dictionary: Isso permite que você obtenha a tonalidade diretamente do Dictionary.

Aqui está uma versão ajustada do seu código:

using System.Text.Json.Serialization;

namespace ScreenSound_04.Modelos
{
    internal class Musica
    {
        private static readonly Dictionary<int, string> keys = new()
        {
            {0, "C"},{1, "C#"},{2, "D"},{3, "D#"},{4, "E"},{5, "F"},{6, "F#"},{7, "G"},{8, "G#"},{9, "A"},{10, "A#"},{11, "B"}
        };

        [JsonPropertyName("song")]
        public string? Nome { get; set; }

        [JsonPropertyName("artist")]
        public string? Artista { get; set; }

        [JsonPropertyName("duration_ms")]
        public int Duracao { get; set; }

        [JsonPropertyName("genre")]
        public string? Genero { get; set; }

        [JsonPropertyName("key")]
        public int Key { get; set; }

        public string Tonalidade => keys.ContainsKey(Key) ? keys[Key] : "Desconhecida";

        public void ExibirDetalhesDaMusica()
        {
            Console.WriteLine($"Artista: {Artista}");
            Console.WriteLine($"Música: {Nome}");
            Console.WriteLine($"Duração em minutos: {Math.Round(Duracao / 1000.0 / 60, 2)}");
            Console.WriteLine($"Gênero: {Genero}");
            Console.WriteLine($"Tonalidade: {Tonalidade}");
        }
    }
}

Alterações e Melhorias:

  • Dicionário estático: O Dictionary foi movido para ser um campo estático, já que ele é imutável e compartilhado entre todas as instâncias da classe Musica.
  • Propriedade Tonalidade simplificada: A propriedade Tonalidade agora usa o Dictionary diretamente para obter a tonalidade correspondente ao Key.
  • Tratamento de chave desconhecida: Adicionei uma verificação para retornar "Desconhecida" caso a chave não exista no Dictionary.

Essa abordagem mantém seu código limpo e eficiente, aproveitando ao máximo o Dictionary para mapear as tonalidades.

Espero ter ajudado e bons estudos!

Olá André, muito obrigado pela ajuda na melhoria do código, ficou realmente mais organizado e bonito!!! Brigadãooo, vou tentar aderir para os próximos projetos :)