1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Resolvido] - [Dúvida] C# - como utilizar foreach com dictionary

Discussão em 'Programação' iniciada por hugolini, 27 de Novembro de 2008. (Respostas: 8; Visualizações: 6121)

  1. hugolini

    hugolini Banido

    Olá todos, preciso novamente de auxílio num pedaço de código.
    Ora então desta vez tenho um Dictionary <string, List<int>> e queria listar todos os conteúdos do dicionário.

    O problema é que não sei como o fazer, utilizando o List dentro do dicionário. Tenho o seguinte código:

    Código:
    public class Estrutura
        {
          
            Dictionary<string, List<int>> coordenadas = new Dictionary<string, List<int>>(); 
    
    // este método que recebe coordenadas funciona sem problemas
    
    public void RecebeCoordenadas()
            {
                Console.Clear();
    
                coordenadas = new Dictionary<string,List<int>>();           
    
                foreach (envolvente objecto in contentor)
                {
                    List<int> valores = new List<int>();
                                                   
                    Console.WriteLine("Insira coordenada Xo para o objecto: {0} !!!", objecto.nome);
                    valores.Add(Convert.ToInt32(Console.ReadLine()));
                    Console.WriteLine("Insira coordenada Yo para o objecto: {0} !!!", objecto.nome);
                    valores.Add(Convert.ToInt32(Console.ReadLine()));
                    Console.WriteLine("Insira o comprimento para o objecto: {0} !!!", objecto.nome);
                    valores.Add(Convert.ToInt32(Console.ReadLine()));
                    Console.WriteLine("Insira a largura para o objecto: {0} !!!", objecto.nome);
                    valores.Add(Convert.ToInt32(Console.ReadLine()));
    
                    coordenadas["objecto.nome"] = valores;
    
                }
            }
    
    //agora neste é que tenho os problemas
    
    public void MostraCoordenadas()
            {
              
                    foreach (DictionaryEntry entrada in coordenadas) 
                    {
                                           
                        Console.WriteLine(entrada.Key);
                        Console.WriteLine(entrada.Value);
                            
                    }
                    
            }
    }
    
    Se alguém me puder dar uma luz, agradeço desde já...
     
    Última edição: 28 de Novembro de 2008
  2. arconada

    arconada Power Member

    Deixa ver se percebi, tens um dicionario de listas de inteiros? ou seja, cada dictionaryEntry == lista de inteiros. Ou seja, para cada entrada in coordenadas vais ter de listar todos os inteiros dessa lista. Isto é, utilizares um Print de lista.
     
  3. hugolini

    hugolini Banido

    Exacto, cada entrada = nome + lista inteiros.

    depois queria para cada nome, listar todos os inteiros (um de cada vez/ou por linha).

    Não tenho é "estaleca" suficiente em C# para fazer isso...
     
  4. sapropel

    sapropel Power Member

    tens de sacar um pair de cada vez e para isso usas o objecto KeyValuePair

    Código:
    Dictionary<string, List<int>> coordenadas = new Dictionary<string, List<int>>();
    (...)
    foreach( KeyValuePair<string, List<int>> pair in coordenadas )
    {
      console.writeline( pair.key );
      foreach( int i in pair.value )
      {
        // fazes o que quiseres com os ints da lista
      }
    }
    (...)
    
    num KeyValuePair a property .key devolve o 1º "valor" desse par (neste caso a string) e a property .value o 2º "valor" (neste caso uma lista de ints).
    qualquer tipo que implemente IDictionary tem de ser tratado desta maneira (acontece o mesmo com as SortedList).
     
  5. hugolini

    hugolini Banido

    Está quase....agora dá-me o seguinte erro

    'System.Collections.Generic.KeyValuePair<string,System.Collections.Generic.List<int>>.key' is inaccessible due to its protection level


    Já tenho o dicionario definido como public e o método não é static...
     
  6. AliFromCairo

    AliFromCairo Power Member

    Deveria ser Key e não key.
     
  7. hugolini

    hugolini Banido

    É isso mesmo :001:

    Muito obrigado ao dois pela ajuda. Ainda tenho muito que aprender nisto...
     
  8. AliFromCairo

    AliFromCairo Power Member

    Já agora, tem atenção às convenções, pois podem dar-te jeito. Por exemplo, em C#, os nomes dos membros públicos de uma classe são normalmente pascal cased (Key), enquanto que os privados (como o key que estavas a tentar aceder) são camel cased. Dá uma rápida vista de olhos por aqui, se estiveres interessado em saber mais.
     
  9. hugolini

    hugolini Banido

    Vou ver isso amanhã com mais calma...mais uma vez obrigado.
     

Partilhar esta Página