C#数组和集合专题5(Hashtable排序和遍历)

②.Hashtable排序

Hashtable没有提供排序的方法,不能直接实现对象的排序。但ArrayList类有排序的方法,可以把所有的键对象存放到ArrayList中,排序完成后再从中取出每一个键对象并输出对应的员工对象。

Hashtable中的Keys属性的作用是获取包含 Hashtable 中的键的 ICollection。

ICollection 接口是 System.Collections 命名空间中类的基接口。

ICollection 接口扩展 Ienumerable、IDictionary和IList 则是扩展 ICollection 的更为专用的接口。IDictionary 实现是键/值对的集合,如 Hashtable 类。IList 实现是值的集合,其成员可通过索引访问,如 ArrayList 类。

 

在上面的main方法中加入,就可以完成对Hashtable对象的排序。

//把ht的键对象全部复制到ArrayList中

            ArrayList al = newArrayList(ht.Keys);

         /*ht.Keys返回ht中所有键对象构成的集合,把该集合传递给ArrayList构造方法则得到一个包

*所有键对象的动态数组

*/

            al.Sort();//从小到大排列

            //排序完成输出

            for (int i = 0; i < al.Count;i++ )

            {

                object e=al[i];

                Employee temp = (Employee)ht[e];//键作为索引器来获得对应的值对象

                Console.WriteLine(temp);

     }

 

我自己想了一种方法,顺序输出也达到了上面排序相同的效果,此方法只是针对键是int,如下:

for (int i = 1; i <= ht.Count; i++)

         {

                 Console.WriteLine(ht[i]);//i是object类型的key,不是索引

}

③.遍历Hashtable

还是借用上面Employee的例子,在main中输入下面的循环,其中DictionaryEntry结构是定义可以设置或检索的字典键值对

foreach(DictionaryEntry entry in ht)

             {

                 object k = entry.Key;

                 object v = entry.Value;

                 Console.WriteLine("键:{0},值:{1}",k,v);

       }

posted on 2012-06-29 09:49  流星落  阅读(343)  评论(0编辑  收藏  举报

导航