国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實(shí)現(xiàn)自定義Dictionary類實(shí)例

2020-01-24 01:32:24
字體:
供稿:網(wǎng)友

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

1.關(guān)于MyDictionary類

本文中實(shí)現(xiàn)的MyDictionary類具有如下功能

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

MyDictionary類是一個(gè)具有兩個(gè)參數(shù)的泛型類,內(nèi)部機(jī)制采用以鍵值對(KeyValuePair)類型為元素的雙向鏈表(LinkedList)實(shí)現(xiàn)

2.實(shí)現(xiàn)代碼

class MyDictioinary<TKey, TValue>{ LinkedList<KeyValuePair<TKey, TValue>> llDictionary  = new LinkedList<KeyValuePair<TKey, TValue>>(); /// <summary> /// 索引器,輸入TKey可以找到對應(yīng)的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> /// 添加一組數(shù)據(jù) /// </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("新增失敗:主鍵已經(jīng)存在");   }  }  llDictionary.AddLast(new KeyValuePair<TKey, TValue>(tk, tv)); } /// <summary> /// 刪除一組數(shù)據(jù) /// </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("刪除失敗:不存在這個(gè)主鍵"); } /// <summary> /// 修改一組數(shù)據(jù) /// </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("修改失敗:不存在這個(gè)主鍵"); } /// <summary> /// 打印整個(gè)Dictionary內(nèi)的全部數(shù)據(jù) /// </summary> public void PrintData() {  Console.WriteLine("==================");  Console.WriteLine("輸出數(shù)據(jù)");  Console.WriteLine("==================");  foreach (KeyValuePair<TKey, TValue> kvp in llDictionary)  {   Console.WriteLine(kvp.Key.ToString() + "/t:" + kvp.Value.ToString());  }  Console.WriteLine(string.Format("共計(jì)輸出 {0} 項(xiàng)", llDictionary.Count));  Console.WriteLine(DateTime.Now.ToLongTimeString());  Console.WriteLine("=================="); } /// <summary> /// 決定按什么順序打印Dictionary內(nèi)的數(shù)據(jù) /// </summary> public enum PrintType {  Normal = 0, //不排序  Ascend = 1, //升序排列  Descend = 2 //降序佩列 }; /// <summary> /// 返回List類型的數(shù)據(jù) /// </summary> /// <param name="printType">List內(nèi)數(shù)據(jù)的排序情況</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可以被轉(zhuǎn)化為浮點(diǎn)數(shù)的情況        {         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可以被轉(zhuǎn)化為浮點(diǎn)數(shù)的情況        {         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函數(shù)調(diào)用示例

static void Main(string[] args){ MyDictioinary<string, string> dic = new MyDictioinary<string, string>(); //插入兩組數(shù)據(jù) dic.Add("1", "MERCURY"); dic.Add("2", "VENUS"); //嘗試插入重復(fù)主鍵的數(shù)據(jù) 報(bào)警:主鍵不存在 try {  dic.Add("1", "EARTH"); } catch (Exception ex) {  Console.WriteLine(ex.Message); } //刪除一組數(shù)據(jù) dic.Delete("1"); //添加一組數(shù)據(jù) dic.Add("1", "MARS"); //修改兩組數(shù)據(jù) dic.Modify("1", "JUPITER"); dic.Modify("2", "SATURN"); //添加兩組數(shù)據(jù) dic.Add("6", "SUN"); dic.Add("5", "MOON"); dic.Add("8", "URANUS"); dic.Add("9", "NEPTUNE"); dic.PrintData(); //通過索引找到對應(yīng)值 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.運(yùn)行示例

希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 利川市| 隆子县| 临清市| 赤水市| 北京市| 庐江县| 白银市| 河池市| 莱芜市| 景洪市| 沭阳县| 海伦市| 晋中市| 米林县| 汝阳县| 庆阳市| 营口市| 鄂托克前旗| 康定县| 平罗县| 明星| 体育| 南川市| 新宾| 岚皋县| 永顺县| 宕昌县| 恩施市| 黎平县| 新营市| 图们市| 崇义县| 常熟市| 灵台县| 福建省| 依兰县| 丰都县| 城固县| 滕州市| 新龙县| 桑日县|