这两天编写
自动化测试用例的时候,用例中有检查Storage和memory信息,需要检查磁盘已用的空间和可用的空间信息,那我想到的当然用键值对存储当前机型中磁盘的信息,与App检测到的信息做对比,下面就通过使用进行总结。
一、Hashtable的简介
HashTable是.Net Framework中System.Collections命名空间提供的一个容器,用于处理和表现类似Key/Value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应key的值。Hashtable中key/value的值对军事object类型,所以Hashtable可用支持任何类型的key/value键对。
二、Hashtable的简单操作
Hashtable中添加一个键值对使用的方法:HashtableObject.Add(key,value);
移除某个键值对:HashtableObject.Remove(key);
移除表中所有元素:HashtableObject.Clear();
判断Hashtable中是否包含特定的key:HashtableObject.Contains(key);
要取某个key的值可用:Hashtable[key]
是继承Dictionary,所以遍历Hashtable列表的时候可以用DictionaryEntry或Object类
如:
foreach(DictionaryEntry de in HashtableObject)
{
Console.WriteLine("Key:{0} Value:{1}", de.Key,de.Value)
}
或
foreach(Object key in HashtableObject.Keys)
{
Console.WriteLine("Key:{0} Value:{1}", key,HashtableObject[key])
}
下面实例:
Class HashTableTest
{
public static void main(string[] args)
{
Hashtable ht=new Hashtable();
long driveTotalSize=new long();
System.IO.DriveInfo[] drives=System.IO.DriveInfo.GetDrives();//获取本机所有的磁盘
foreach(System.IO.DriveInfo drive in drives)
{
driveTotalSize=drive.TotalSize/(1024*1024*1024);//获取磁盘总容量
ht.Add(drive+"TotalSize",driveTotalSize);//
}
Console.WriteLine("C disk total size:"+ht[@"C:\TotalSize"]);//这是根据Key直接取值
//下面是遍历Hashtable方法一
foreach(Object key in ht.Keys)
{
Console.WriteLine("Key:{0} Value:{1}", key,ht[key])
}
//遍历Hashtable方法二
foreach(DictionaryEntry de in ht)
{
Console.WriteLine("Key:{0} Value:{1}", de.Key,de.Value)
}
if(ht.Contains(@"D:\TotalSize"))
ht.Remove(@"D:\TotalSize");//移除
}
}
注:Hashtable中的键值对不可以为null,如果使用put(null,null)这种方式添加,可以通过编译,因为key和value都是属于Object类型,但运行时会报NullPointerException异常,如果要存储的值有存在为null的情况,最后不要用Hashtable存储,可以改用HashMap进行存储,HashMap中,null可以作为键,但只有允许存在一个这样的键,但可以运行存在多个键所对应的值为null的情况。
三、对Hashtable排序的方法
对HashTable进行排序在这里的定义是对key/value键值对的key按照一定规则重新排列,但实际上这个定义不能实现的,因为无法直接在Hashtable中队key进行重新排列,如果需要Hashtable按照某种规则进行输出,可以采用变通的做饭:
如:
ArrayList list=new ArrayList(ht.Keys);
list.Sort();//按字母进行排序
foreach(string k in list)
{
Console.Write(k+":");
Console.WriteLine(ht[k]);
}