数据结构和算法 – 6.构建字典: DictionaryBase 类和 SortedList 类

 

6.1.DictionaryBase 类的基础方法和属性

大家可以把字典数据结构看成是一种计算机化的词典。要查找的词就是关键字,而词的定义就是值。
DictionaryBase 类是一种用作专有字典实现基础的抽象( MusInherit)类。
存储在字典中的键值对实际上是作为 DictionaryEntry 对象来存储的。 DictionaryEntry 结构提供了两个域,一个用于关键字而另一个用于值。在这个结构中所要关注的只是 Key 属性和 Value 属性这两个属性(或方法)。当把键值对录入到字典内的时候,这些方法会返回存储的值。本章稍后会讨论 DictionaryEntry 对象。就内部而言,会把键值对存储在被称为 InnerHashTable 的散列表对象中。DictionaryBase 类实际上实现了来自 System.Collections 名字空间的界面,即 IDictionary。

class DictionaryBase_类和_SortedList_类
    {
        static void Main()
        {
            IPAddresses myIPs = new IPAddresses();
            myIPs.Add("Mike", "192.155.12.1");
            myIPs.Add("David", "192.155.12.2");
            myIPs.Add("Bernica", "192.155.12.3");
            Console.WriteLine("There are " + myIPs.Count + " IP addresses");
            Console.WriteLine("David's ip address: " + myIPs.Item("David"));
            myIPs.Clear();
            Console.WriteLine("There are " + myIPs.Count + " IP addresses");
            Console.Read();
        }

        
    }

    public class IPAddresses : DictionaryBase
    {
        public IPAddresses()
        { }
        public void Add(string name, string ip)
        {
            base.InnerHashtable.Add(name, ip);
        }
        public string Item(string name)
        {
            return base.InnerHashtable[name].ToString();
        }
        public void Remove(string name)
        {
            base.InnerHashtable.Remove(name);
        }
    }

image

 

6.1.1.CopyTo 方法和 GetEnumerator 方法

DictionaryEntry 结构提供了两个域,一个用于关键字而另一个用于值。在这个结构中所要关注的只是 Key 属性和 Value 属性这两个属性(或方法)。

DictionaryEntry[] ips = new DictionaryEntry[myIPs.Count];
            myIPs.CopyTo(ips, 0);
            for (int i = 0; i <= ips.GetUpperBound(0); i++)
            {
                Console.WriteLine(string.Format("key:{0},Value:{1}",ips[i].Key,ips[i].Value));
            }

image

 

6.2.泛型的 KeyValuePair 类

一个 KeyValuePair 对象可以向下列这样实例化:

KeyValuePair<string, int> mcmillan = new KeyValuePair<string, int>("McMillan", 99);

这里会分别取回关键字和值:
Console.Write(mcmillan.Key);
Console.Write(" " + mcmillan.Value);
KeyValuePair<string,int>[] gradeBook=new KeyValuePair<string,int>[10];
            gradeBook[0] = new KeyValuePair<string, int>("McMillan", 99);
            gradeBook[1] = new KeyValuePair<string, int>("Ruff", 64);
            for (int i = 0; i <= gradeBook.GetUpperBound(0); i++)
                if (gradeBook[i].Value != 0)
                    Console.WriteLine(gradeBook[i].Key + ": " + gradeBook[i].Value);
            Console.Read();

image

 

6.3.SortedList 类

SortedList 是按照分类顺序基于键值来存储键值对。当存储的关键字很重要时可以使用这种数据结构。比如,在标准词典中希望所存储的词是按照字母的顺序存储的情况。本章稍后还将说明如何用类来保存一个单独分类的值表。

例如,可以把 myips 象下面这样实例化:

SortedList<string, string> myips = new SortedList<string, string>();
            myips.Add("Mike", "192.155.12.1");
            myips.Add("David", "192.155.12.2");
            myips.Add("Bernica", "192.155.12.3");
            foreach (string key in myips.Keys)
                Console.WriteLine("Name: " + key + "\n" + "IP: " + myips[key]);

image

转载于:https://www.cnblogs.com/tangge/p/5520131.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值