web-dev-qa-db-fra.com

utiliser une boucle for pour parcourir un dictionnaire

J'utilise généralement une boucle foreach pour parcourir le dictionnaire.

Dictionary<string, string> dictSummary = new Dictionary<string, string>();

Dans ce cas, je veux couper les entrées d'espace blanc et la boucle foreach ne le permet cependant pas.

foreach (var kvp in dictSummary)
{
    kvp.Value = kvp.Value.Trim();    
}

Comment puis-je faire cela avec une boucle for?

for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
31
Arianule

KeyValuePair<TKey, TValue> ne vous permet pas de définir le Value, il est immuable.

Vous devrez le faire comme ceci:

foreach(var kvp in dictSummary.ToArray())
    dictSummary[kvp.Key] = kvp.Value.Trim();

La partie importante ici est le ToArray. Cela copiera le dictionnaire dans un tableau, donc changer le dictionnaire à l'intérieur de foreach ne lancera pas un InvalidOperationException.

Une approche alternative utiliserait la méthode ToDictionary de LINQ:

dictSummary = dictSummary.ToDictionary(x => x.Key, x => x.Value.Trim());
20
Daniel Hilgarth

et ça?

for (int i = dictSummary.Count - 1; i >= 0; i--) {
  var item = dictSummary.ElementAt(i);
  var itemKey = item.Key;
  var itemValue = item.Value;
}
43
Abdul Ahad

Vous n'avez pas besoin d'utiliser .ToArray() ou .ElementAt(). C'est aussi simple que d'accéder au dictionnaire avec la clé:

dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());
4
Moslem Ben Dhaou