警惕Dictionary和SortedDictionary的顺序陷阱_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 警惕Dictionary和SortedDictionary的顺序陷阱

警惕Dictionary和SortedDictionary的顺序陷阱

 2013/8/5 17:08:26  新生活一号  博客园  我要评论(0)
  • 摘要:/*我们查询资料得知Dictionary的遍历顺序和添加Add时的顺序是一致的,不像HashTable顺序不可知;于是我要依赖Dictionary的这种顺序一致特性做一个,固定大小400长度的队列,如果超过400个元素就Remove删除掉老的数据,保留新的数据;我为什么不用队列Queue因为它没有ContainsKey键查找功能,因为我需要用键来去重.当我的程序运行一段时间后发生逻辑问题,本来我的程序逻辑是超是400后删除Remove最添加的老数据,但是删除的却是最后添加的新数据
  • 标签:陷阱
/*
我们查询资料得知Dictionary的遍历顺序和添加Add时的顺序是一致的,不像 HashTable 顺序不可知;于是我要依赖Dictionary的这种顺序一致特性做一个,固定大小400长度的队列,如果超过400个元素就Remove删除掉老的数 据,保留新的数据;我为什么不用队列Queue因为它没有ContainsKey键查找功能,因为我需要用键来去重.
       当我的程序运行一段时间后发生逻辑问题 ,本来我的程序逻辑是超是400后删除Remove最添加的老数据,但是删除的却是最后添加的新数据,当遍历的时候顺序打乱了,并不是添加的程序,经测试发现字典对象并不能一定保持程序一致,一个使用Remove顺序一致性将得不到保证,经测试
*/




SortedDictionary<string, string> testdict = new SortedDictionary<string, string>(); testdict.Add("a", "a"); testdict.Add("b", "b"); testdict.Add("c", "c"); testdict.Remove("a"); testdict.Add("a", "a"); foreach (KeyValuePair<string, string> kv in testdict) { Response.Write(kv.Key);//输出abc 而不是 bca } Dictionary<string, string> testdict = new Dictionary<string, string>(); testdict.Add("a", "a"); testdict.Add("b", "b"); testdict.Add("c", "c"); testdict.Remove("a"); testdict.Add("a", "a"); foreach (KeyValuePair<string, string> kv in testdict) { Response.Write(kv.Key);//输出abc 而不是 bca }

 

 

 

 

一但使用了Remove字典对象的程序,它已经乱了,现在只有依赖字典加对象双结合才能达到我的要求,悲剧

 

发表评论
用户名: 匿名