如何遍历并删除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集合内容的主要内容,如果未能解决你的问题,请参考以下文章