1. 程式人生 > >程式碼優化--資料字典(dictionary)的使用

程式碼優化--資料字典(dictionary)的使用

<pre class="csharp" name="code"><span style="font-size:18px;"></span> 


       字典(dictionary)是一個集合,每一個元素都是一個鍵/值對,常用於查詢和排序的列表,且查詢速度非常快。此次程式碼優化過程中使用了資料字典,執行速度有了明顯的提升。


【dictionary基本操作】


       1. 必須引用名稱空間:System.Collection.Generic
       2. 資料字典定義:

<span style="font-size:18px;">     Dictionary<string, string> openWith = new Dictionary<string, string>();</span>

           3. 新增:

          openWith.Add("txt", "notepad.exe");

          openWith.Add("bmp", "paint.exe");

          openWith.Add("dib", "paint.exe");


      4. 遍歷:

         (1)key或者value值

<span style="font-size:18px;">      foreach (string key in openWith.Keys)     { 
           string txt=key;       
      ...}</span>

             
                 (2)  遍歷整個字典

         foreach (KeyValuePair<string, string> kvp in openWith)
     {
        ...

    }

     5. 刪除元素

         openWith.Remove("doc");

     6. 根據key值獲得對應的value值

         string value=openWith["doc"];

     7. 取出value或key值陣列

          array arr=openWith.values  //直接取出value陣列

          array arr=openwith.Keys     //直接取出key值陣列

     8.搜尋是否包含某key值或某value

          openWith.ContainsKey("doc")

          openWith.ContainsValue("1");  

     9. 資料字典清除

          openWith.clear

 【優勢】

       1. 查詢速度快,下圖是從網上找到的對dictionary的執行速度總結:

          為什麼執行速度快?

          官方解釋:Dictionary 泛型類提供了從一組鍵到一組值的對映。字典中的每個新增項都由一個值及其相關聯的鍵組成。通過鍵來檢索值的速度是非常快的,接近於 O(1),這是因為 Dictionary 類是作為一個雜湊表來實現的。

     2. 查詢方式多樣,可任意取出鍵值陣列或者value陣列,可見上面的基本操作8

     3. 結構嚴密,value值唯一,且不能為空

     4. dictionary VS List 

      查詢:list是順序儲存,由於儲存結構是順序的,所以查詢起來很費勁;字典是一組鍵到一組值的對映,每個值對應一個關聯的鍵,所以搜尋速度很快;

      刪除:list順序儲存,當刪除一個值時,需要移動後續元素;dictionary則像連結串列,刪除時不需要移動後續元素。

【實戰應用】

      此次專案的程式碼優化過程中就遇到這樣一個問題:介面要求動態載入教職工姓名和各個評分項。這個介面需要查詢3張表來實現:先根據評論人ID,從設定考評表查閱被評論人ID和設定考評ID,然後根據被評論人ID從教職工表查詢被評論人姓名,從詳細考評表查詢評分專案。

      在提交評分的過程中保持這3張表的一致性就成了困難,這時,使用資料字典,在查詢將被評論人ID,設定考評ID,評論人姓名進行繫結,問題就能得到很好的解決:

      1. 不用再重複查詢

      2. 搜尋速度得到提高

【總結】

       在實踐中多接觸一些新鮮血液,擴寬自己的知識面,並在實踐中不斷應用,在以後的程式設計道路上不斷對比總結,總能收穫很多。