3223 votes

Quelle est la meilleure façon d'écrire un commentaire?

J'ai vu un peu différentes façons d'effectuer une itération sur un Dictionnaire en C#. Est-il standard?

4431voto

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

1091voto

Jacob Points 9117

Si vous essayez d'utiliser un Dictionnaire générique en C# comme vous le feriez utiliser un tableau associatif dans une autre langue:

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

Ou, si vous avez seulement besoin de parcourir la collection de clés, l'utilisation

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

Et enfin, si vous êtes seulement intéressés par les valeurs:

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

(Prendre note que l' var mot-clé est une option de C# 3.0, fonction, vous pouvez également utiliser le type exact de vos clés/valeurs ici)

195voto

Maurício Fedatto Points 541

Dans certains cas, vous pouvez avoir un compteur qui peut être fournie par la boucle for de la mise en œuvre. Pour cela, LINQ fournit ElementAt qui permet de:

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

117voto

J Healy Points 1336

Dépend si vous êtes après la remise des clés ou des valeurs...

À partir de MSDN Dictionnaire<(Of <(TKey, TValue>)>) description de la Classe:

   // 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);
    }

71voto

George Mauer Points 22685

Je dirais foreach est la norme, mais cela dépend évidemment de ce que vous cherchez

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

Est-ce que vous cherchez?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X