2456 votos

¿Cuál es la mejor manera de iterar sobre un diccionario en C#?

He visto algunas formas diferentes de iterar sobre un diccionario en C#. ¿Existe una forma estándar?

3494voto

Pablo Fernandez Puntos 32003
foreach(KeyValuePair<string, string> entry in MyDic)
{
    // do something with entry.Value or entry.Key
}

816voto

Jacob Puntos 9117

Si usted está tratando de usar un diccionario genérico en C# como usted usaría un Array asociativo en otro lenguaje:

foreach(KeyValuePair<string, string> item in myDictionary)
{
  foo(item.Key);
  bar(item.Value);
}

O, si sólo necesita iterar sobre la colección de claves, utilice

foreach(var item in myDictionary.Keys)
{
  foo(item);
}

Y por último, si sólo te interesan los valores:

foreach(var item in myDictionary.Values)
{
  foo(item);
}

(Tenga en cuenta que el var es una característica opcional de C# 3.0, también podría utilizar el tipo exacto de sus claves/valores aquí)

141voto

Maurício Fedatto Puntos 541

En algunos casos puede necesitar un contador que puede ser proporcionado por la implementación del bucle for. Para ello, LINQ proporciona ElementAt que permite lo siguiente:

for (int index = 0; index < dictionary.Count; index++) {
  var item = dictionary.ElementAt(index);
  var itemKey = item.Key;
  var itemValue = item.Value;
}

95voto

J Healy Puntos 1336

Depende de si buscas las claves o los valores...

De la MSDN Dictionary<(Of <(TKey, TValue>)>) Descripción de la clase:

   // When you use foreach to enumerate dictionary elements,
    // the elements are retrieved as KeyValuePair objects.
    Console.WriteLine();
    foreach( KeyValuePair<string, string> kvp in openWith )
    {
        Console.WriteLine("Key = {0}, Value = {1}", 
            kvp.Key, kvp.Value);
    }

    // To get the values alone, use the Values property.
    Dictionary<string, string>.ValueCollection valueColl =
        openWith.Values;

    // The elements of the ValueCollection are strongly typed
    // with the type that was specified for dictionary values.
    Console.WriteLine();
    foreach( string s in valueColl )
    {
        Console.WriteLine("Value = {0}", s);
    }

    // To get the keys alone, use the Keys property.
    Dictionary<string, string>.KeyCollection keyColl =
        openWith.Keys;

    // The elements of the KeyCollection are strongly typed
    // with the type that was specified for dictionary keys.
    Console.WriteLine();
    foreach( string s in keyColl )
    {
        Console.WriteLine("Key = {0}", s);
    }

49voto

George Mauer Puntos 22685

Yo diría que foreach es la forma estándar, aunque obviamente depende de lo que estés buscando

foreach(var value in my_dictionary) {
  ...
}

¿Es eso lo que buscas?

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X