【C#学习】笔记(2):哈希表

 

命名空间

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行),其中涉及两个关键方法ContainsKeyContainsValue)以及Add
  • 遍历哈希表的元素(Key/Value),由于C#中键和值都属于ICollection类,所以采用第23-26行的办法
  • 可以通过30行的代码所示,根据键去查找值,时间复杂度$O(1)$ 

【C#学习】笔记(2):哈希表

上一篇:【WinForm】杂记(6):C#之DataTable类(总结)


下一篇:如何学习Windows编程