HashTable在WinForm下的上位机软件开发中的应用

2021-09-16 08:00:38宋城虎
科技创新与应用 2021年25期
关键词:定义

宋城虎,马 静

(中国电子科技集团公司第二十七研究所,河南 郑州450047)

HashTable(也叫哈希表),是根据关键码值(key,value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。在.NET Framework中,System.Collections命名空间提供了HashTable容器的实现。HashTable中key、value键值对均为object类型,所以HashTable可以支持任何类型的key、value键值对。

在工程应用中,上位机应用程序通常需要与多个下位机或者外围设备进行通信,从而实现对设备的控制以及设备状态与数据的接收与处理。当上位机通信的对象增多时,上位机编程也会随之变得越来越复杂。

本文以C#WinForm框架下的上位机编程为例讨论一种HashTable的应用方法,该方法实现简单,使用灵活方便,可大幅度简化上位机程序开发中的一些复杂问题。

1 双键哈希表

HashTable的结构为1个key对应1个value,这个结构在实际应用中经常显得过于单一,如果两个key对应1个value那么显然就会灵活许多,我们就可以构建类似于“对象‘key1’的‘key2’属性为‘value’”这样的逻辑关系(如图1、图2所示)。

由于在.NET Framework中的HashTable中key、value键值对均为object类型,那么value本身也可以存储另一个HashTable,因此我们可以构建两层哈希表来实现双键哈希结构,即在第一层HashTable1中通过key1存储第二层HashTable2,在第二层HashTable2中通过key2存储value值(如图3所示)。

于是我们只需要定义哈希表的三个基本操作“存储、读取、删除”即可实现双键哈希表功能。其中删除需要针对key1和key2定义两个函数,因此总共需要定义4个函数,以下给出代码:

1.1 存储函数

void hash_save(Hashtable hash,object key1,object key2,object value)

{

if(hash!=null)

{

Hashtable hash1;

if(hash[key1]==null)

{

hash1=new Hashtable();

hash.Add(key1,hash1);

}

else hash1=(Hashtable)(hash[key1]);

if(hash1[key2]==null)hash1.Add(key2,value);

else{

hash1.Remove(key2);

hash1.Add(key2,value);

}}}

1.2 读取函数

object hash_Load(Hashtable hash,object key1,object key2)

{

i(fhash[key1]!=null)return((Hashtable)(hash[key1]))[key2];

else return null;

}

1.3 清除key1

void hash_remove_key1(Hashtable hash,object key1)

{

((Hashtable)(hash[key1])).Clea(r);

}

1.4 清除key2

void hash_remove_key2(Hashtable hash,object key1,object key2)

{

((Hashtable)(hash[key1])).Remove(key2);

}

2 工程应用

2.1 通信连接管理

上位机应用程序通常需要与多个下位机或者外围设备进行通信,这里以udp通信为例(其他通信原理相同)。……

登录APP查看全文

猜你喜欢
定义
活用定义巧解统计概率解答题
例谈椭圆的定义及其应用
题在书外 根在书中——圆锥曲线第三定义在教材和高考中的渗透
永远不要用“起点”定义自己
海峡姐妹(2020年9期)2021-01-04 01:35:44
严昊:不定义终点 一直在路上
华人时刊(2020年13期)2020-09-25 08:21:32
定义“风格”
成功的定义
山东青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定义快修连锁
修辞学的重大定义
当代修辞学(2014年3期)2014-01-21 02:30:44
山的定义
公务员文萃(2013年5期)2013-03-11 16:08:37