亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現自定義Dictionary類實例

2020-01-24 01:32:24
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現自定義Dictionary類。分享給大家供大家參考。具體如下:

1.關于MyDictionary類

本文中實現的MyDictionary類具有如下功能

1)可以增加、修改、刪除鍵值對
2)可以通過索引器,找到一個鍵對應的值
3)可以遍歷打印類中全部的鍵值對
4)可以將類中的序列轉化為有序的(不排序、升序、降序)List類型

MyDictionary類是一個具有兩個參數的泛型類,內部機制采用以鍵值對(KeyValuePair)類型為元素的雙向鏈表(LinkedList)實現

2.實現代碼

class MyDictioinary<TKey, TValue>{ LinkedList<KeyValuePair<TKey, TValue>> llDictionary  = new LinkedList<KeyValuePair<TKey, TValue>>(); /// <summary> /// 索引器,輸入TKey可以找到對應的TValue /// </summary> /// <param name="tk">鍵值</param> /// <returns></returns> public TValue this[TKey tk] {  get  {   foreach(KeyValuePair<TKey, TValue> kvp in llDictionary)   {    if (tk.Equals(kvp.Key))    {     return kvp.Value;    }   }   return default(TValue);  } } /// <summary> /// 添加一組數據 /// </summary> /// <param name="tk"></param> /// <param name="tv"></param> public void Add(TKey tk, TValue tv) {  foreach (KeyValuePair<TKey, TValue> kvp in llDictionary)  {   if (tk.Equals(kvp.Key))   {    throw new Exception("新增失?。褐麈I已經存在");   }  }  llDictionary.AddLast(new KeyValuePair<TKey, TValue>(tk, tv)); } /// <summary> /// 刪除一組數據 /// </summary> /// <param name="tk"></param> public void Delete(TKey tk) {  foreach (KeyValuePair<TKey, TValue> kvp in llDictionary)  {   if (tk.Equals(kvp.Key))   {    llDictionary.Remove(kvp);    return;   }   }  throw new Exception("刪除失敗:不存在這個主鍵"); } /// <summary> /// 修改一組數據 /// </summary> /// <param name="tk"></param> /// <param name="tv"></param> public void Modify(TKey tk, TValue tv) {  LinkedListNode<KeyValuePair<TKey, TValue>> lln = llDictionary.First;  while (lln != null )  {   if (tk.Equals(lln.Value.Key))   {    llDictionary.AddBefore(lln, new KeyValuePair<TKey, TValue>(tk, tv));    llDictionary.Remove(lln);    return;   }   lln = lln.Next;  }  throw new Exception("修改失?。翰淮嬖谶@個主鍵"); } /// <summary> /// 打印整個Dictionary內的全部數據 /// </summary> public void PrintData() {  Console.WriteLine("==================");  Console.WriteLine("輸出數據");  Console.WriteLine("==================");  foreach (KeyValuePair<TKey, TValue> kvp in llDictionary)  {   Console.WriteLine(kvp.Key.ToString() + "/t:" + kvp.Value.ToString());  }  Console.WriteLine(string.Format("共計輸出 {0} 項", llDictionary.Count));  Console.WriteLine(DateTime.Now.ToLongTimeString());  Console.WriteLine("=================="); } /// <summary> /// 決定按什么順序打印Dictionary內的數據 /// </summary> public enum PrintType {  Normal = 0, //不排序  Ascend = 1, //升序排列  Descend = 2 //降序佩列 }; /// <summary> /// 返回List類型的數據 /// </summary> /// <param name="printType">List內數據的排序情況</param> /// <returns></returns> public List<KeyValuePair<TKey, TValue>> ToList(PrintType printType = PrintType.Normal) {  switch (printType)  {   case PrintType.Normal:    {     return llDictionary.ToList();    }   case PrintType.Ascend:    {     if (llDictionary.Count == 0) return null;     LinkedList<KeyValuePair<TKey, TValue>> newll =       new LinkedList<KeyValuePair<TKey, TValue>>();     try     {      LinkedListNode<KeyValuePair<TKey, TValue>> lln = llDictionary.First;      while (lln != null)      {       LinkedListNode<KeyValuePair<TKey, TValue>> lln2 = newll.First;       while (lln2 != null)       {        //Key是字符串的情況        if (llDictionary.First.Value.Key.GetType() ==          "string".GetType())        {         if (string.Compare(lln2.Value.Key.ToString(),          lln.Value.Key.ToString()) > 0)         {          newll.AddBefore(lln2, new LinkedListNode           <KeyValuePair<TKey, TValue>>(lln.Value));          break;         }        }        else //Key可以被轉化為浮點數的情況        {         if (double.Parse(lln2.Value.Key.ToString()) >          double.Parse(lln.Value.Key.ToString()))         {          newll.AddBefore(lln2, new LinkedListNode           <KeyValuePair<TKey, TValue>>(lln.Value));          break;         }        }        lln2 = lln2.Next;       }       if (lln2 == null)       {        newll.AddLast(new LinkedListNode         <KeyValuePair<TKey, TValue>>(lln.Value));       }       lln = lln.Next;      }     }     catch (Exception ex)     {      Console.WriteLine(ex.Message);     }     return newll.ToList();    }   case PrintType.Descend:    {     if (llDictionary.Count == 0) return null;     LinkedList<KeyValuePair<TKey, TValue>> newll =      new LinkedList<KeyValuePair<TKey, TValue>>();     try     {      LinkedListNode<KeyValuePair<TKey, TValue>> lln = llDictionary.First;      while (lln != null)      {       LinkedListNode<KeyValuePair<TKey, TValue>> lln2 = newll.First;       while (lln2 != null)       {        //Key是字符串的情況        if (llDictionary.First.Value.Key.GetType() ==          "string".GetType())        {         if (string.Compare(lln2.Value.Key.ToString(),          lln.Value.Key.ToString()) < 0)         {          newll.AddBefore(lln2, new LinkedListNode           <KeyValuePair<TKey, TValue>>(lln.Value));          break;         }        }        else //Key可以被轉化為浮點數的情況        {         if (double.Parse(lln2.Value.Key.ToString()) <          double.Parse(lln.Value.Key.ToString()))         {          newll.AddBefore(lln2, new LinkedListNode           <KeyValuePair<TKey, TValue>>(lln.Value));          break;         }        }        lln2 = lln2.Next;       }       if (lln2 == null)       {        newll.AddLast(new LinkedListNode         <KeyValuePair<TKey, TValue>>(lln.Value));       }       lln = lln.Next;      }     }     catch (Exception ex)     {      Console.WriteLine(ex.Message);     }     return newll.ToList();    }   default: return null;  } }}

3.Main函數調用示例

static void Main(string[] args){ MyDictioinary<string, string> dic = new MyDictioinary<string, string>(); //插入兩組數據 dic.Add("1", "MERCURY"); dic.Add("2", "VENUS"); //嘗試插入重復主鍵的數據 報警:主鍵不存在 try {  dic.Add("1", "EARTH"); } catch (Exception ex) {  Console.WriteLine(ex.Message); } //刪除一組數據 dic.Delete("1"); //添加一組數據 dic.Add("1", "MARS"); //修改兩組數據 dic.Modify("1", "JUPITER"); dic.Modify("2", "SATURN"); //添加兩組數據 dic.Add("6", "SUN"); dic.Add("5", "MOON"); dic.Add("8", "URANUS"); dic.Add("9", "NEPTUNE"); dic.PrintData(); //通過索引找到對應值 Console.WriteLine("key為6的元素value為:" + dic["6"]); Console.WriteLine("key為3的元素value為:" + dic["3"]); List<KeyValuePair<string, string>> l; //輸出升序排列好的List l = dic.ToList(MyDictioinary<string, string>.PrintType.Ascend); Console.WriteLine("升序排列后的List:"); for (int i = 0; i < l.Count; i++) {  Console.WriteLine(l[i].Key.ToString() + "/t:" + l[i].Value.ToString()); } //輸出降序排列好的List l = dic.ToList(MyDictioinary<string, string>.PrintType.Descend); Console.WriteLine("降排列后的List:"); for (int i = 0; i < l.Count; i++) {  Console.WriteLine(l[i].Key.ToString() + "/t:" + l[i].Value.ToString()); } Console.ReadLine();}

4.運行示例

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线激情网| 亚洲人成在线播放| 日本三级久久久| 国产精品成人在线| 久久久久国产精品一区| 国产一区二区三区直播精品电影| 精品久久久久久久久久久久久| 欧美视频不卡中文| 自拍亚洲一区欧美另类| 国产日韩欧美自拍| 欧美激情三级免费| 国产精品久久视频| 国产亚洲欧美一区| 久久久精品国产亚洲| 国产不卡一区二区在线播放| 成人免费看黄网站| 午夜精品一区二区三区视频免费看| 日韩影视在线观看| 色青青草原桃花久久综合| 亚洲欧美国产va在线影院| 国产欧美欧洲在线观看| 日韩中文在线观看| 国产一区二区精品丝袜| 精品久久久香蕉免费精品视频| 国产免费观看久久黄| 亚洲人成网在线播放| 精品中文字幕在线观看| 欧美精品福利视频| 国产精品91久久| 深夜福利91大全| 18久久久久久| 亚洲欧美国产精品久久久久久久| 日韩欧美有码在线| 国产精品久久久久久久久久久不卡| 日韩激情av在线免费观看| 国产偷国产偷亚洲清高网站| 久久国产精品久久国产精品| 亚洲欧美日本另类| 亚洲午夜女主播在线直播| 九九热在线精品视频| 久久久久中文字幕| 国产在线观看一区二区三区| 国产成人在线精品| 91国产在线精品| 亚洲成人精品久久久| 亚洲免费电影一区| 国产一区二区视频在线观看| 91国内免费在线视频| 久久久噜噜噜久噜久久| 欧美激情欧美激情在线五月| 亚洲va欧美va在线观看| 韩曰欧美视频免费观看| 中文字幕一精品亚洲无线一区| 久久在线免费观看视频| 成人欧美一区二区三区黑人| 欧美性生交大片免网| 久久久国产精品免费| 宅男66日本亚洲欧美视频| 日韩不卡在线观看| 91中文在线观看| 九九精品在线视频| 日韩精品在线电影| 欧美肥老妇视频| 国产a∨精品一区二区三区不卡| 亚洲男人天堂九九视频| 欧美极品美女电影一区| 亚洲视频axxx| 欧美日韩精品中文字幕| 日本成人黄色片| 91在线|亚洲| 久久久久久久久久久av| 日韩动漫免费观看电视剧高清| 日韩精品福利在线| 91亚洲国产精品| 国产精欧美一区二区三区| 性色av香蕉一区二区| 青青草国产精品一区二区| 国产精品老牛影院在线观看| 九九热最新视频//这里只有精品| 91国在线精品国内播放| 青青精品视频播放| 亚洲视频日韩精品| 国产精品高清免费在线观看| 久久精品一本久久99精品| 91精品国产乱码久久久久久久久| 在线观看国产精品日韩av| 欧美日韩在线影院| 亚洲人精选亚洲人成在线| 国产精品扒开腿做爽爽爽视频| 在线观看中文字幕亚洲| 欧洲成人午夜免费大片| 精品动漫一区二区| 色99之美女主播在线视频| 亚洲欧美制服第一页| 亚洲毛片一区二区| 亚洲影视中文字幕| 亚洲成人免费在线视频| 国产精品视频大全| 国产成人一区二区三区小说| 色播久久人人爽人人爽人人片视av| 激情av一区二区| 国产精品www色诱视频| 青青草国产精品一区二区| 91国产一区在线| 91精品国产免费久久久久久| 一本一本久久a久久精品牛牛影视| 成人高h视频在线| 日本免费一区二区三区视频观看| 欧美香蕉大胸在线视频观看| 日韩av在线免播放器| 久久久这里只有精品视频| 欧美国产第一页| 亚洲黄色成人网| 精品国产一区久久久| 国产成人精品一区二区三区| 国产日韩精品在线播放| 成人免费观看49www在线观看| 欧美在线一级视频| 91精品国产乱码久久久久久蜜臀| 久久久久久久999精品视频| 亚洲石原莉奈一区二区在线观看| 亚洲福利影片在线| 1769国内精品视频在线播放| 欧美激情一区二区三级高清视频| 亚洲精品videossex少妇| 久久久精品在线观看| 米奇精品一区二区三区在线观看| 91在线高清视频| 亚洲色图五月天| 久久福利视频网| 国产精品中文字幕久久久| 久久久之久亚州精品露出| 久久亚洲国产精品| 日韩电影中文 亚洲精品乱码| 日韩欧美精品在线观看| 国产在线拍揄自揄视频不卡99| 久久精品欧美视频| 亚洲自拍另类欧美丝袜| 欧美孕妇性xx| 成人网在线免费看| xxxxxxxxx欧美| 国产欧美久久久久久| 国产精品色午夜在线观看| 亚洲自拍小视频| 亚洲老司机av| 国产精品91在线观看| 久久亚洲欧美日韩精品专区| 久久久免费av| 日韩av成人在线| 九九热这里只有精品免费看| 午夜精品在线观看| 97婷婷大伊香蕉精品视频| 欧美激情视频播放| 九九热这里只有精品6| 欧美www在线| 国产一区视频在线播放| 91精品国产自产91精品| 久久成人人人人精品欧| 久久香蕉精品香蕉| 欧美高清视频在线| 国产成人精品视频在线| 欧美日韩午夜剧场| 国产精品1区2区在线观看| 久久精品青青大伊人av|