如何遍历并删除Dictionary集合内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何遍历并删除Dictionary集合内容相关的知识,希望对你有一定的参考价值。
参考技术A 在遍历数据结构的时候,是不可以修改原数据结构的。不然就会抛出错误。我常用的解决办法是做一份拷贝,遍历这个拷贝。(如果数据不是很大的话)
比如,这个代码:
C#代码
1.<SPAN style="FONT-SIZE: x-small">IDictionary<int, string> ht = new Dictionary<int, string>();
2.ht.Add(1, "one");
3.ht.Add(2, "two");
4.
5.// Print "one,two"
6.Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray()));
7.
8.foreach (int key in new List<int>(ht.Keys))
9. if (key == 1) ht.Remove(key);
10.
11.
12.// Print "two"
13.Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray()));</SPAN>
IDictionary<int, string> ht = new Dictionary<int, string>();
ht.Add(1, "one");
ht.Add(2, "two");
// Print "one,two"
Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray()));
foreach (int key in new List<int>(ht.Keys))
if (key == 1) ht.Remove(key);
// Print "two"
Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray())); 我在遍历的时候,做了一份拷贝。代码是 new List<int>(ht.Keys),用到了 List 的构造拷贝函数,
会对 ht.Keys 做一份拷贝。之后的 foreach 其实是在对这个拷贝做遍历。
转载
guojian3021886本回答被提问者和网友采纳
循环删除Dictionary集合中为空的Key,其他集合均可改造
/// <summary>
/// 移除为空的Key
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
private static Dictionary<string, string> RemoveNullKey(Dictionary<string, string> dic)
{
string keyNames = "";
foreach (string key in dic.Keys)
{
if(string.IsNullOrEmpty(dic[key]))
{
keyNames += key + ",";
}
}
string[] str_keyNames = keyNames.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries);
foreach (string key in str_keyNames)
{
dic.Remove(key);
}
return dic;
}
以上是关于如何遍历并删除Dictionary集合内容的主要内容,如果未能解决你的问题,请参考以下文章
dict遍历的时候删除dict中的值报错RuntimeError: dictionary changed size during iteration
Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration