J'ai vu un peu différentes façons d'effectuer une itération sur un Dictionnaire en C#. Est-il standard?
Réponses
Trop de publicités?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)
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;
}
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);
}