我通常使用foreach循環遍歷Dictionary。使用for循環遍歷字典
在這種情況下,我想修剪空白的條目,然而foreach循環不允許這樣做。
foreach (var kvp in dictSummary)
{
kvp.Value = kvp.Value.Trim();
}
我該如何用for循環做到這一點?
for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
我通常使用foreach循環遍歷Dictionary。使用for循環遍歷字典
在這種情況下,我想修剪空白的條目,然而foreach循環不允許這樣做。
foreach (var kvp in dictSummary)
{
kvp.Value = kvp.Value.Trim();
}
我該如何用for循環做到這一點?
for (int i = dictSummary.Count - 1; i >= 0; i--)
{
}
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());
這個是什麼?
for (int i = dictSummary.Count - 1; i >= 0; i--) {
var item = dictSummary.ElementAt(i);
var itemKey = item.Key;
var itemValue = item.Value;
}
雖然有可能使用這樣的代碼,我不會推薦它。 'Enumerable.ElementAt'並不是訪問字典中元素的最佳方法...您的代碼可能是O(n^2),因爲Dictionary不允許按位置訪問元素。 – 2013-03-06 07:34:21
你爲什麼從頭到尾迭代?不要告訴我,這是因爲性能的原因... – DHN 2013-03-06 07:50:34
@AlexeiLevenkov ...謝謝。我不知道這件事。剛剛搜索了這個問題,它看起來像一個巨大的缺點。再次感謝。 – 2013-03-06 07:52:53
你並不需要使用.ToArray()
或.ElementAt()
。這是因爲訪問字典的鍵一樣簡單:
dictSummary.Keys.ToList().ForEach(k => dictSummary[k] = dictSummary[k].Trim());
可能重複:什麼是遍歷一個字典在C#中的最佳方式(http://stackoverflow.com/questions/141088/what - 這是最好的方式來迭代在字典中的c) – publicgk 2013-03-06 07:19:56
或這;)http://stackoverflow.com/questions/1070766/editing-dictionary-values-in-a- foreach-loop – Belial09 2013-03-06 07:20:18
@ Belial09在您發佈的鏈接中提出的問題中,似乎沒有修改鍵;只是價值觀。 – joce 2013-04-11 21:04:34