Подтвердить что ты не робот

Использование цикла for для итерации через словарь

Обычно я использую цикл foreach для итерации через словарь.

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

В этом случае я хочу обрезать элементы пробела, а цикл foreach, однако, не позволяет этого.

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

Как это сделать с циклом for?

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

Ответ 1

KeyValuePair<TKey, TValue> не позволяет установить Value, он неизменен.

Вам нужно будет сделать это следующим образом:

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

Важная часть здесь - ToArray. Это скопирует словарь в массив, поэтому изменение словаря внутри foreach не будет вызывать InvalidOperationException.

Альтернативный подход будет использовать метод LINQ ToDictionary:

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

Ответ 2

как насчет этого?

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

Ответ 3

Вам не нужно использовать .ToArray() или .ElementAt(). Это так же просто, как доступ к словарю с помощью ключа:

dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());