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

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:
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.
 
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.

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...
 
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).
 
tens de sacar um pair de cada vez e para isso usas o objecto KeyValuePair

Código:
public 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 )
  {
    {Console.WriteLine(i);}
  }
}
(...)
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).

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...
 
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.
 
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.

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