C#資料結構和演算法學習系列十一—-構建字典DictionaryBase 類和SortedList 類

來源:互聯網
上載者:User

 字典是一種把資料作為索引值對來儲存的資料結構。作為一種抽象的類,DictionaryBase 類可以用來實現不同的資料結構,其中這些資料結構全部把資料存放區成索引值對。這些資料結構可能是散列表、鏈表或者其他一些資料結構類型。SortedList類是按照分類順序基於索引值來儲存索引值對的。這是一種有趣的資料結構,因為通過引用資料結構中值的索引位置也可以訪問到儲存在結構中的資料,這也使得結構的行為在某些方面和數組很相像。

A.Dictionary類。DictionaryBase 類是一種用作專有字典實現基礎的抽象(MusInherit)類。儲存在字典中的索引值對實際上是作為DictionaryEntry 對象來儲存的。DictionaryEntry 結構提供了兩個域,一個用於關鍵字而另一個用於值。在這個結構中所要關注的只是Key 屬性和Value 屬性這兩個屬性(或方法)。當把索引值對錄入到字典內的時候,這些方法會返回儲存的值。DictionaryBase
類實際上實現了來自System.Collections 名字空間的介面,即IDictionary。

1.DictionaryBase 類的基礎方法和屬性。在用字典對象進行操作的時候需要執行幾種操作。就最少運算元量而言,需要Add 方法來添加新資料,需要Item 方法來取回數值,需要Remove 方法來移除掉索引值對,還需要Clear方法來清除所有資料的資料結構。執行個體如下:

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);     }}

相應調用如下:

class chapter11{     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");     }}

這裡還有其他兩種方法, 它們都是DictionaryBase 類的成員: CopyTo 方法和GetEnumerator 方法。CopyTo 方法把字典的內容複寫給一維的數組。儘管可以把數組聲明成Object,然後用CType 函數把對象轉換成為DictionaryEntry,但是這裡應該把數組聲明成DictionaryEntry數組。

IPAddresses myIPs = new IPAddresses(@"c:\ips.txt ");DictionaryEntry[] ips = new DictionaryEntry[myIPs.Count-1];myIPs.CopyTo(ips, 0);

B.KeyValuePair類
C#語言提供了一種小類用來允許建立象字典式的對象,此對象是基於關鍵字來儲存資料的。這種類被稱為是KeyValuePair 類。由於每個對象只能持有一個關鍵字和一個值,所以它的使用是受到限制的。執行個體化:

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

如果把對象放置在數組內,那麼KeyValuePair 類是比較好用的。下列程式舉例說明如何?簡單等級書:

using System;using System.Collections.Generic;using System.Text;namespace Generics{     class Program     {          static void Main(string[] args)          {               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();          }     }}

 

C.SortedList 是按照分類順序基於索引值來儲存索引值對。當儲存的關鍵字很重要時可以使用這種資料結構。比如,在標準詞典中希望所儲存的詞是按照字母的順序儲存的情況。
1.SortedList 類的使用。執行個體化如下:

SortedList myips = new SortedList();myips.Add("Mike", "192.155.12.1");myips.Add("David", "192.155.12.2");myips.Add("Bernica", "192.155.12.3");

SortedList 類的通用版本允許確定關鍵字和值兩者的資料類型:SortedList<Tkey, TValue>。類似用法同Dictionay類

總結:DictionaryBase 類是用來建立使用者字典的抽象類別。而字典則是利用散列表(或者有時為單獨的鏈表)作為潛在的資料結構來把資料存放區到索引值對內的一種資料結構。索引值對作為DictionaryEntry 對象來進行儲存, 而且必須使用Key 方法和Value 方法來取回DictionaryEntry 對象中的實際值。當程式員需要建立強型別的資料結構的時候,經常會用到DictionaryBase
類。通常情況下會把添加給字典的資料作為Object 來儲存,但是對於自訂字典而言,程式員可能會削減需要執行的類型轉換的數量,從而使得程式變得更加有效且更易於閱讀。SortedList 類是Dictionary 類的一種特殊類型。它會按照分類的順序通過關鍵字來儲存索引值對。此外,也可以通過引用索引數的方式來取回儲存在SortedList 中的值,其中索引數是儲存數值的位置,這和使用數組非常相似。在System.Collections.Generic 名字域中還有SortedDictionary 可以像通用SortedList
類一樣操作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.