C# - Acessando dados de um dicionário ordenado - OrderedDictionary


  Neste artigo vou mostrar como podemos acessar dados de um dicionário ordenado usando a classe OrderedDictionary.

Antes de começar vamos lembrar que um Dictionary representa uma coleção de chaves e valores.

Você conhece a classe OrderedDictionary ?

O que ela tem de diferente em relação a Dictionary ?

Bem, a classe OrderedDictionary representa uma coleção de pares chave/valor que são acessíveis por chave ou índice.

Percebeu a diferença ?

Usando um OrderedDictionary, você pode executar ações específicas em um índice numérico na coleção, ou você pode usar o estilo de entrada do dicionário percorrendo a coleção.  Ai esta o diferencial desta coleção.

Para ter acesso a esse recurso vamos precisar usar o namespace:   System.Collections.Specialized 

Se você precisar retornar dados usando um ICollection vai precisar também usar o namespace :  System.Collections

Tudo bem, mas mostre-me o código...

Criando uma solução no VS 2017 usando o template Visual C# -> Windows Classic Desktop -> Console App ;

Inclua o código abaixo no método Main()

using System;
using System.Collections;
using System.Collections.Specialized;
using static System.Console;
namespace C_OrderedDictionary
{
    class Program
    {
        static void Main(string[] args)
        {
            OrderedDictionary times = new OrderedDictionary();
            times.Add("Pontos", "Time");
            times.Add("59", "Corintians");
            times.Add("53", "Santos");
            times.Add("50", "Grêmio");
            times.Add("47", "Cruzeiro");
            //----------------------------------------
            // Referencia aos valores ao estilo Array
            WriteLine("Acesso ao estilo Array");
            for (int i = 0; i < times.Count; i++)
            {
                var item = (string)times[i];
                WriteLine(item);
            }
            ReadKey();
            //----------------------------------------------
            // Referencia chave e valores ao estilo Dictionary
            WriteLine("Acesso usando o estilo Dictionary");
            foreach (DictionaryEntry time in times)
            {
                Console.WriteLine(time.Key);
                Console.WriteLine(time.Value);
            }
            ReadKey();
            //-----------------------------------------
            // Acessando chaves e valores usando uma coleção ICollection
            WriteLine("Acesso usando uma coleção ICollection");
            ICollection chaveColecao = times.Keys;
            ICollection valorColecao = times.Values;
            String[] mChaves = new String[times.Count];
            String[] mValores = new String[times.Count];
            chaveColecao.CopyTo(mChaves, 0);
            valorColecao.CopyTo(mValores, 0);
            for (int i = 0; i < times.Count; i++)
            {
                WriteLine("chave: " + mChaves[i]);
                WriteLine("Valor: " + mValores[i]);
            }
            ReadKey();
        }
    }
}

Acessamos as informações no dicionário ordenado times usando diferentes abordagens.

Na primeira usamos um laço for/next e um índice para retornar cada objeto armazenado na coleção. Este método será o mais rápido para um coleção de dados muito grande.

Na segunda usamos um laço foreach e usamos DictionayEntry que define um pár chave/valor do tipo Dictionary que pode ser recuperado.

Lembrando que estrutura DictionaryEntry é usada com qualquer objeto que implemente a interface IDictionary, pois tais objetos são coleções de pares chave/valor. Assim, quando você enumera um objeto IDictionary com foreach, os pares chave/valor são retornados para a estrutura DictionaryEntry e podem ser recuperados usando as propriedades Key e Value.

Na terceira usamos uma coleção do tipo ICollection que obtém as chaves e os valores e os copia para coleções de strings que são acessadas usando for/next.

Concluimos que se você precisa o poder de uma coleção e a simplicidade de acesso de um índice numérico a coleção OrderdeDictionary é uma ótima opção.

(Disse Jesus) O meu mandamento é este: Que vos ameis uns aos outros, assim como eu vos amei. 
João 15:12

Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti