②.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);
}