Использование цикла 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--)
{
}
Ответы
Ответ 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());