命名空间
using System.Collections; using System.Collections.Generic;
基本操作
//add one key-value: HashtableObject.Add(key, value); //remove one key-value: HashtableObject.Remove(key); //remove all: HashtableObject.Clear(); //judge: HashtableObject.Contains(key);
实例背景:要将一张表中的某列取出不重复的元素
private void moverepeat(DataTable tb)
{
String[] val = new String[];
//delete repeat key reactant
Hashtable ht = new Hashtable();
int kk = 0;//as the index
foreach (DataRow dr in tb_KeyReactant.Rows) {
string s = dr[1].ToString();
if (!ht.ContainsKey(dr[1].ToString())) {
ht.Add(dr[1].ToString(), kk.ToString());
kk++;
}
}
//sort by alpha
ArrayList akeys = new ArrayList(ht.Keys);
akeys.Sort();
ICollection keys = ht.Keys;
//get keys
int k = 0
foreach (string key in keys) {
val[k] = key;
k++;
}
//search keys
String nameOfTar = "example";
int indexOfTar = ht[nameOfTar];
}
关键点:
- 哈希表用于去重(第8行到第14行),其中涉及两个关键方法ContainsKey(ContainsValue)以及Add。
- 遍历哈希表的元素(Key/Value),由于C#中键和值都属于ICollection类,所以采用第23-26行的办法
- 可以通过30行的代码所示,根据键去查找值,时间复杂度$O(1)$