.NET中的字典(Hashtable)

来源:互联网 发布:java代理模式怎么回事 编辑:程序博客网 时间:2024/06/14 05:30

字典是一种复杂的数据结构,它允许通过KEY值(键)来访问元素,例如:

EmployeeData类中保存员工的数据,包括:(employeeID,employeeName,employeeSalary)。

string employeeID ;   //员工编号是一个字符串型,将被用来作为字典中的键(当然还可以用任意类型的对象作为键)。

EmployeeData myEmployeeData=Employees[myID];     //通过字符串型的键来访问(索引)员工的数据;

类定义代码如下:

    /// <summary>
    /// 员工数据类;
    /// </summary>
    public class EmployeeData
    {
        protected string name;
        protected string sex;
        protected string  id;  //作为键;
        /// <summary>
        /// 构造函数;
        /// </summary>
        /// <param name="id">EmployeeID ID</param>
        /// <param name="name">字符串 姓名</param>
        /// <param name="salary">字符串 性别</param>
        public EmployeeData(string  id, string name, string sex)
        {
            this.id = id;
            this.name = name;
            this.sex=sex;
        }
        /// <summary>
        /// 重写基类的ToString()方法;
        /// </summary>
        /// <returns>以规定的格式返回结果字符串</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder(id.ToString(), 100);
            sb.Append(";");
            sb.Append(string.Format("{0,-20}",name));
            sb.Append("  ");
            sb.Append(string.Format("{0,-20}",sex));
            return sb.ToString();
        }
    }

执行代码:

private void btnDisplayData_Click(object sender, EventArgs e)
        {
            //
            //初始化字典,包含两个条目;
            //
            Hashtable employees = new Hashtable(11);
            string  jammesID ="J230";
            EmployeeData jammesData = new EmployeeData(jammesID, "jammess","男");

            string  michealID ="M001";
            EmployeeData michealData = new EmployeeData(michealID, "micheal", "男");

            employees.Add(jammesID, jammesData);
            employees.Add(michealID, michealData);

            //
            //根据输入的员工编号在字典中查找该员工的数据并显示到列表框中;
            //
            string tempID = txtInput.Text.ToUpper();
            object tempObject = employees[tempID];
            if (tempObject != null)
            {
                EmployeeData tempEmployeeData = (EmployeeData)tempObject;
                lbResult.Items.Add(tempEmployeeData.ToString());
            }
            else
            {
                lbResult.Items.Add("字典中没有此员工的条目!");
            }
        }

构建字典的关键步骤:

1、构建KEY类和数据类,键类用来定义KEY对象,数据类用来定义字典中的数据对象,这两个类是不能混淆的;

2、导入命名空间System.Collections,新建一个hashtable对象 hashtable myHashtable=new hashtable(51)  注意在给定一个素数作为参数时能得到最好的性能,确保这个参数比你要在字典中存储的条目(对象)数大;

3、根据键和数据填充上一步新建的hashtable对象:myHashtable.add(KeyClass newKey,DataClass newData);

4、根据键值在字典中查找对应的数据:

      Object tempObject =myHashtable[ tempKey ];

      DataClass tempData=( DataClass ) tempObject;  //强类型转换成你定义的数据类型;

      对数据tempData作想要的操作;

字典

对比数组只能使用int型的有限大小的数字来作为下标来访问元素方便得多。而且在字典中的条目(相比数组中的元素个数)是可以动态增加和删除的。

原创粉丝点击