如:
Hashtable ht = new Hashtable();
ht.Add("1","1")
ht.Add("2","2")
ht.Add("3","3")要求取出的顺序也是1,2,3;现在foreach dt.keys取出内容的顺序没有规律。

解决方案 »

  1.   

    对哈希表进行排序
      对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
     ArrayList akeys=new ArrayList(ht.Keys); //别忘了导入System.Collections
     akeys.Sort(); //按字母顺序进行排序
     for(string skey in akeys)
     {
       Console.Write(skey + ":");
       Console.WriteLine(ht[skey]);//排序后输出
     }
      

  2.   

    Hashtable本就不是为了这样的顺序存取开发的,要顺序存取,使用ArrayList,根据ArrayList.Index来顺序存取。建议再仔细看看集合类的使用方法。类 说明 
    ArrayList 使用大小可按需动态增加的数组实现 IList 接口。 
    BitArray 管理位值的压缩数组,该值表示为布尔值,其中 true 表示位是打开的 (1),false 表示位是关闭的 (0)。 
    CaseInsensitiveComparer 比较两个对象是否相等,比较时忽略字符串的大小写。 
    CaseInsensitiveHashCodeProvider 使用忽略字符串大小写的哈希算法,为对象提供哈希代码。 
    CollectionBase 为强类型集合提供抽象(在 Visual Basic 中为 MustInherit)基类。 
    Comparer 比较两个对象是否相等,其中字符串比较是区分大小写的。 
    DictionaryBase 为键/值对的强类型集合提供抽象(在 Visual Basic 中为 MustInherit)基类。 
    Hashtable 表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。 
    Queue 表示对象的先进先出集合。 
    ReadOnlyCollectionBase 为强类型只读集合提供抽象(在 Visual Basic 中为 MustInherit)基类。 
    SortedList 表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。 
    Stack 表示对象的简单的后进先出集合。 
      

  3.   

    在存入hash之后,hash表将自动对存入的内存进行哈希运算。所以是不会按原来的顺序读出的。