命名空间
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)$