1. 苏葳的备忘录首页
  2. 编程

C#中Hashtable的顺序遍历及列表控件的insert方法

c# 哈希表 hashtable在.NET中,Hashtable是System.Collections命名空间提供的一个容器,用于处理类似keyvalue的键值对。将一个Hashtable反序列化后,进行访问时,有两种方法:foreach (DictionaryEntry ti in hashthread)或者foreach (Int32 key in hashthread.Keys )对于前者,直接用ti.key或ti.value访问key和value即可。后一种,则用hashthread[key]来访问值。但Hashtable的foreach排序是个问题。

原hashtable以1,2,3的整数键值插入,但反序列化后并用foreach访问时,无论哪种方式,用debug.print显示的值顺序,都是3,2,1这样的逆序。据说字符串型的键值,还会以字符码顺序排列。不太清楚foreach的内部排序规则。

那么一种办法就是将Hashtable的key值集合排序。但也需要额外的步骤。hashtable.keys.Copyto方法可将keys集合拷入一个Array类型,比如string[]或Int32[]等。而string数组或Int32数组是可用Array.sort()静态方法排序的。问题在于Keys的元素只能作为object类型进行拷贝,而Object[]默认无法排序。仍然比较麻烦。

由于读出顺序为3,2,1,所以在列表控件里add时,会显示为3,2,1的顺序。其实用Inert(0,row)的方法即可绕开此问题。新元素将被插在列表控件的0索引处,这样高序号项目将被逐条挤到高序号,而最小元素会最后停留在0索引的位置,正好实现意图。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/494.html

发表评论

邮箱地址不会被公开。 必填项已用*标注