使用for循环遍历字典

Ari*_*ule 31 c# dictionary for-loop

我通常使用foreach循环遍历Dictionary.

Dictionary<string, string> dictSummary = new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想修剪空白的条目,而foreach循环确实不允许这样做.

foreach (var kvp in dictSummary)
{
    kvp.Value = kvp.Value.Trim();    
}
Run Code Online (Sandbox Code Playgroud)

如何使用for循环执行此操作?

for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
Run Code Online (Sandbox Code Playgroud)

Abd*_*had 45

那这个呢?

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

  • 虽然可以使用这样的代码,但我不推荐它."Enumerable.ElementAt"并不是访问字典中元素的最佳方式...您的代码可能是O(n ^ 2),因为Dictionary不允许按位置访问元素. (6认同)
  • @DHN ...好吧,我刚刚从问题中复制了它 (2认同)

Dan*_*rth 20

KeyValuePair<TKey, TValue>不允许你设置Value,它是不可变的.

你必须这样做:

foreach(var kvp in dictSummary.ToArray())
    dictSummary[kvp.Key] = kvp.Value.Trim();
Run Code Online (Sandbox Code Playgroud)

这里的重要部分是ToArray.这会将Dictionary复制到一个数组中,因此更改foreach中的字典不会抛出InvalidOperationException.

另一种方法是使用LINQ的ToDictionary方法:

dictSummary = dictSummary.ToDictionary(x => x.Key, x => x.Value.Trim());
Run Code Online (Sandbox Code Playgroud)


Mos*_*aou 6

您不需要使用.ToArray().ElementAt()。就像使用键访问字典一样简单:

dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());
Run Code Online (Sandbox Code Playgroud)