Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2021年3月1日 星期一

【C# 語言】Dictionary & SortedDictionary & SortedList 比較

今天居裡貓知道了一個新的"字典(Dictionary)"的應用方法,因此寫了一個簡單的應用,用來比較之間的差異。平常在使用字典的時候並不會去注意到時間或是記憶體空間,
使用上也偏向單純,只是把 value 找出對應的 key 建立起字典,
接著就用一些方法去新增、搜尋、移除等等。

今天知道了這個新的"字典"方法,
看到網路上及 Microsoft docs 上的說明,心想這東西的用途跟效果如何!?
所以開起來這篇的練習!!

原有常見的字典為:Dictionary
這個就是一個利用 key & value 來建立資料組合,
不可以有重複的 key 否則在加入的時候會產生錯誤!

另外發現的"字典"有兩個為:



這兩種字典有著跟 Dictionary 一樣的特性,
但就是多了排序(Sort)這件事情,
他們都會將加入的資料 key 值經過排序,
不過這裡可能要注意的是,key 最好是使用 C# 中原有的類別,
自定義類別可能無法達成排序的效果。

在 docs 中,有著一段的備註資料:


簡單的說明就是,
SortedList 有著比 SortedDictionary 較少的記憶體消耗。
SortedDictionary 針對未排序的資料,插入和刪除有著比 SortedList 更快的速度。
針對以排序的資料,SortedList 有著比 SortedDictionary 更快的加入速度。

接著看到網路上的資料整理(Time complexity overview: Dictionary classes),



好的說到這裡,
就開始說明本次練習的內容吧!!

本次居裡貓針對幾個提到的特性來做比較,
加入速度、移除速度、已排序未排序資料,
依這幾個面向來觀察之間的差異性。

本次練習會透過設定的資料筆數針對三種字典來加入資料,
因為字典不可以出現重複的 key 值,
所以針對未排序資料會透過一些方法來隨機產生不同的 key 值,
已達到未排序的 key 值。
已排序資料則是以 for loop 來決定 key 值。
資料部份皆以隨機方式產生。

針對尋找的部份單純尋找總比數除以 2 的 key 資料。
刪除的行為一樣針對資料總比數除以 2 的 key 資料進行刪除。

以下為練習的視窗介面:



紅框處:資料總筆數
橘框處:未來序、已排序三種字典的三個測試按鈕
粉框處:顯示三種字典執行花費時間

以下為執行之後產生的執行結果:

由上圖結果可以看出,Dictionary 不管是排序還是位排序的結果都快過其他兩者,
也如 docs 上及網路資料說的一樣。
而 SortedDictionary 及 SortedList 也如同 docs 上跟網路資料說的一樣,
在未排序的資料 SortedDictionary 有著比較快的加入跟移除速度。
SortedList 則在排序資料中獲得的叫快的加入速度,而且速度與 Dictionary 非常接近。

總和上述的測試結果,
如同 docs 上描述的時間花費相同,
這時有人會問,那原本的 Dcitionary 有著比這兩個方法還要快的速度,
為什麼還要使用這兩個方法呢!?
這的確是,但居裡貓自己則認為,必須考量到使用情境的問題,
假設今天呈現資料、使用資料是必須要經過排序的,
如果使用原本的 dictionary 就得再做一次排序的方法,
這時的時間花費不見的比較快,並且在程式碼中還會額外多了一些。
因此類似情境下,可以幫忙排序的方法就便利便捷許多!
在針對兩個排序的字典來看,可能會在動作行為上,
SortedDictionary 在通常情境下,操作的時間花費都比較低,
但 SortedList 也有自身優勢,已有排序的資料,還有記憶體空間較小,
在這些條件比較特殊的時候很有優勢的!

好的,本次的練習分享就到這裡。
如果有什麼見解可以與我分享~希望同時也可以幫助到大家~

以下為程式碼的分享~
※註:本次程式碼也是利用程式碼產生介面,詳見 Create___With


----------------------------------程式碼分割線--------------------------------------------------------------


  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Threading.Tasks;  
  9. using System.Windows.Forms;  
  10.   
  11. using System.Diagnostics;  
  12.   
  13. namespace Practice_Dictionary_SortedDictionary_SortedList  
  14. {  
  15.     public partial class frmMain : Form  
  16.     {  
  17.         #region Fields  
  18.         private Dictionary<intint> _NoSortIndex_dictionary;  
  19.         private SortedDictionary<intint> _NoSortIndex_sortedDictionary;  
  20.         private SortedList<intint> _NoSortIndex_sortedList;  
  21.         private Random _NoSortIndex, _NoSortIndexData;  
  22.         private List<int> _lsIndexTable;  
  23.   
  24.         private Dictionary<intint> _dictionary;  
  25.         private SortedDictionary<intint> _sortedDictionary;  
  26.         private SortedList<intint> _sortedList;  
  27.         private Random _SortIndexData;  
  28.   
  29.         NumericUpDown[] _nudDataCount = new NumericUpDown[1];  
  30.         Button[] _btnWork = new Button[6];  
  31.         Label[] _lblTitle = new Label[4];  
  32.         ListBox[] _lsbResult = new ListBox[3];  
  33.         Button _btnTestUI;  
  34.   
  35.         Stopwatch sw;  
  36.   
  37.         delegate void SetControlsCallBack(Control _crtl, object _obj);  
  38.  
  39.         #endregion // Fields  
  40.  
  41.         #region Construct  
  42.   
  43.         public frmMain()  
  44.         {  
  45.             InitializeComponent();  
  46.         }  
  47.  
  48.         #endregion // Construct  
  49.  
  50.         #region Event  
  51.   
  52.         private void frmMain_Load(object sender, EventArgs e)  
  53.         {  
  54.             Initialize();  
  55.         }  
  56.   
  57.         private void _btnTestUI_Click(object sender, EventArgs e)  
  58.         {  
  59.             this.Controls.Clear();  
  60.   
  61.             Initialize();  
  62.         }  
  63.   
  64.         private void _btnWork_Click(object sender, EventArgs e)  
  65.         {  
  66.             Button _tmpBtn = (Button)sender;  
  67.             switch (_tmpBtn.Name)  
  68.             {  
  69.                 case "btnNoSortDictionary":  
  70.                     NoSortIndexDictionary((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  71.                     break;  
  72.                 case "btnNoSortSortedDictionary":  
  73.                     NoSortIndexSortedDictionary((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  74.                     break;  
  75.                 case "btnNoSortSortedList":  
  76.                     NoSortIndexSortedList((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  77.                     break;  
  78.                 case "btnSortDictionary":  
  79.                     SortIndexDictionary((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  80.                     break;  
  81.                 case "btnSortSortedDictionary":  
  82.                     SortIndexSortedDictionary((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  83.                     break;  
  84.                 case "btnSortSortedList":  
  85.                     SortIndexSortedList((int)(_nudDataCount.First(_ => _.Name == "nudDataCount").Value));  
  86.                     break;  
  87.             }  
  88.         }  
  89.         #endregion // Event  
  90.  
  91.         #region Functions  
  92.   
  93.         private void Initialize()  
  94.         {  
  95.             this.Width = 720;  
  96.             this.Height = 720;  
  97.   
  98.             _NoSortIndex = new Random(Guid.NewGuid().GetHashCode());  
  99.             _NoSortIndexData = new Random();  
  100.             _SortIndexData = new Random();  
  101.             sw = new Stopwatch();  
  102.   
  103.             ////CreateButtonWithTestUI();  
  104.             CreateLabelWithTitle(4);  
  105.             CreateNumericUpDownWithDataCount(1);  
  106.             CreateButtonWithWork(6);  
  107.             CreateListBoxWithResult(3);  
  108.         }  
  109.   
  110.         private void  ControlsCallBackFunction(Control _ctl, object _obj)  
  111.         {  
  112.             if (_ctl is ListBox)  
  113.             {  
  114.                 ListBox _tmpLsb = _ctl as ListBox;  
  115.                 switch (_tmpLsb.Name)  
  116.                 {  
  117.                     case "lsbDictionaryResult":  
  118.                         if (_tmpLsb.InvokeRequired == true)  
  119.                         {  
  120.                             SetControlsCallBack d = new SetControlsCallBack(ControlsCallBackFunction);  
  121.                             _tmpLsb.Invoke(d, new object[] { _tmpLsb, _obj });  
  122.                         }  
  123.                         else  
  124.                         {  
  125.                             _tmpLsb.Items.Add(_obj);  
  126.                             _tmpLsb.SelectedIndex = _tmpLsb.Items.Count - 1;  
  127.                         }  
  128.                         break;  
  129.                     case "lsbSortedDictionaryResult":  
  130.                         if (_tmpLsb.InvokeRequired == true)  
  131.                         {  
  132.                             SetControlsCallBack d = new SetControlsCallBack(ControlsCallBackFunction);  
  133.                             _tmpLsb.Invoke(d, new object[] { _tmpLsb, _obj });  
  134.                         }  
  135.                         else  
  136.                         {  
  137.                             _tmpLsb.Items.Add(_obj);  
  138.                             _tmpLsb.SelectedIndex = _tmpLsb.Items.Count - 1;  
  139.                         }  
  140.                         break;  
  141.                     case "lsbSortedListResult":  
  142.                         if (_tmpLsb.InvokeRequired == true)  
  143.                         {  
  144.                             SetControlsCallBack d = new SetControlsCallBack(ControlsCallBackFunction);  
  145.                             _tmpLsb.Invoke(d, new object[] { _tmpLsb, _obj });  
  146.                         }  
  147.                         else  
  148.                         {  
  149.                             _tmpLsb.Items.Add(_obj);  
  150.                             _tmpLsb.SelectedIndex = _tmpLsb.Items.Count - 1;  
  151.                         }  
  152.                         break;  
  153.                 }  
  154.             }  
  155.         }  
  156.  
  157.         #region Work  
  158.         private void NoSortIndexDictionary(int _DataCount)  
  159.         {  
  160.             _NoSortIndex_dictionary = new Dictionary<intint>();  
  161.             _lsIndexTable = new List<int>(Enumerable.Range(1, _DataCount + 1));  
  162.             _lsIndexTable = _lsIndexTable.OrderBy(_ => _NoSortIndex.Next()).ToList<int>();  
  163.   
  164.             sw.Reset();  
  165.             sw.Restart();  
  166.   
  167.             for (int i = 1; i <= _DataCount; i++)  
  168.             {  
  169.                 _NoSortIndex_dictionary.Add(_lsIndexTable[i], _NoSortIndexData.Next(0, 999999));  
  170.             }  
  171.   
  172.             sw.Stop();  
  173.             string _strMessage = "NoSortIndexDictionary cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  174.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  175.   
  176.             sw.Reset();  
  177.             sw.Restart();  
  178.   
  179.             foreach (var _v in _NoSortIndex_dictionary)  
  180.             {  
  181.                 if (_v.Key == (_DataCount / 2))  
  182.                 {  
  183.                     break;  
  184.                 }  
  185.             }  
  186.   
  187.             sw.Stop();  
  188.             _strMessage = "NoSortIndexDictionary find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  189.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  190.   
  191.             sw.Reset();  
  192.             sw.Restart();  
  193.   
  194.             _NoSortIndex_dictionary.Remove(_DataCount / 2);  
  195.   
  196.             sw.Stop();  
  197.             _strMessage = "NoSortIndexDictionary remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  198.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  199.         }  
  200.   
  201.         private void NoSortIndexSortedDictionary(int _DataCount)  
  202.         {  
  203.             _NoSortIndex_sortedDictionary = new SortedDictionary<intint>();  
  204.             _lsIndexTable = new List<int>(Enumerable.Range(1, _DataCount + 1));  
  205.             _lsIndexTable = _lsIndexTable.OrderBy(_ => _NoSortIndex.Next()).ToList<int>();  
  206.   
  207.             sw.Reset();  
  208.             sw.Restart();  
  209.   
  210.             for (int i = 1; i <= _DataCount; i++)  
  211.             {  
  212.                 _NoSortIndex_sortedDictionary.Add(_lsIndexTable[i], _NoSortIndexData.Next(0, 999999));  
  213.             }  
  214.   
  215.             sw.Stop();  
  216.             string _strMessage = "NoSortIndexSortedDictionary cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  217.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  218.   
  219.             sw.Reset();  
  220.             sw.Restart();  
  221.   
  222.             foreach (var _v in _NoSortIndex_sortedDictionary)  
  223.             {  
  224.                 if (_v.Key == (_DataCount / 2))  
  225.                 {  
  226.                     break;  
  227.                 }  
  228.             }  
  229.   
  230.             sw.Stop();  
  231.             _strMessage = "NoSortIndexSortedDictionary find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  232.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  233.   
  234.             sw.Reset();  
  235.             sw.Restart();  
  236.   
  237.             _NoSortIndex_sortedDictionary.Remove(_DataCount / 2);  
  238.   
  239.             sw.Stop();  
  240.             _strMessage = "NoSortIndexSortedDictionary remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  241.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  242.         }  
  243.   
  244.         private void NoSortIndexSortedList(int _DataCount)  
  245.         {  
  246.             _NoSortIndex_sortedList = new SortedList<intint>();  
  247.             _lsIndexTable = new List<int>(Enumerable.Range(1, _DataCount + 1));  
  248.             _lsIndexTable = _lsIndexTable.OrderBy(_ => _NoSortIndex.Next()).ToList<int>();  
  249.   
  250.             sw.Reset();  
  251.             sw.Restart();  
  252.   
  253.             for (int i = 1; i <= _DataCount; i++)  
  254.             {  
  255.                 _NoSortIndex_sortedList.Add(_lsIndexTable[i], _NoSortIndexData.Next(0, 999999));  
  256.             }  
  257.   
  258.             sw.Stop();  
  259.             string _strMessage = "NoSortIndexSortedList cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  260.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  261.   
  262.             sw.Reset();  
  263.             sw.Restart();  
  264.   
  265.             foreach (var _v in _NoSortIndex_sortedList)  
  266.             {  
  267.                 if (_v.Key == (_DataCount / 2))  
  268.                 {  
  269.                     break;  
  270.                 }  
  271.             }  
  272.   
  273.             sw.Stop();  
  274.             _strMessage = "NoSortIndexSortedList find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  275.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  276.   
  277.             sw.Reset();  
  278.             sw.Restart();  
  279.   
  280.             _NoSortIndex_sortedList.Remove(_DataCount / 2);  
  281.   
  282.             sw.Stop();  
  283.             _strMessage = "NoSortIndexSortedList remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  284.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  285.         }  
  286.   
  287.         private void SortIndexDictionary(int _DataCount)  
  288.         {  
  289.             _dictionary = new Dictionary<intint>();  
  290.   
  291.             sw.Reset();  
  292.             sw.Restart();  
  293.   
  294.             for (int i = 1; i <= _DataCount; i++)  
  295.             {  
  296.                 _dictionary.Add(i, _NoSortIndexData.Next(0, 999999));  
  297.             }  
  298.   
  299.             sw.Stop();  
  300.             string _strMessage = "SortIndexDictionary cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  301.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  302.   
  303.             sw.Reset();  
  304.             sw.Restart();  
  305.   
  306.             foreach (var _v in _dictionary)  
  307.             {  
  308.                 if (_v.Key == (_DataCount / 2))  
  309.                 {  
  310.                     break;  
  311.                 }  
  312.             }  
  313.   
  314.             sw.Stop();  
  315.             _strMessage = "SortIndexDictionary find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  316.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  317.   
  318.             sw.Reset();  
  319.             sw.Restart();  
  320.   
  321.             _dictionary.Remove(_DataCount / 2);  
  322.   
  323.             sw.Stop();  
  324.             _strMessage = "SortIndexDictionary remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  325.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbDictionaryResult"), _strMessage);  
  326.         }  
  327.   
  328.         private void SortIndexSortedDictionary(int _DataCount)  
  329.         {  
  330.             _sortedDictionary = new SortedDictionary<intint>();  
  331.   
  332.             sw.Reset();  
  333.             sw.Restart();  
  334.   
  335.             for (int i = 1; i <= _DataCount; i++)  
  336.             {  
  337.                 _sortedDictionary.Add(i, _NoSortIndexData.Next(0, 999999));  
  338.             }  
  339.   
  340.             sw.Stop();  
  341.             string _strMessage = "SortIndexSortedDictionary cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  342.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  343.   
  344.             sw.Reset();  
  345.             sw.Restart();  
  346.   
  347.             foreach (var _v in _sortedDictionary)  
  348.             {  
  349.                 if (_v.Key == (_DataCount / 2))  
  350.                 {  
  351.                     break;  
  352.                 }  
  353.             }  
  354.   
  355.             sw.Stop();  
  356.             _strMessage = "SortIndexSortedDictionary find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  357.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  358.   
  359.             sw.Reset();  
  360.             sw.Restart();  
  361.   
  362.             _sortedDictionary.Remove(_DataCount / 2);  
  363.   
  364.             sw.Stop();  
  365.             _strMessage = "SortIndexSortedDictionary remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  366.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedDictionaryResult"), _strMessage);  
  367.         }  
  368.   
  369.         private void SortIndexSortedList(int _DataCount)  
  370.         {  
  371.             _sortedList = new SortedList<intint>();  
  372.   
  373.             sw.Reset();  
  374.             sw.Restart();  
  375.   
  376.             for (int i = 1; i <= _DataCount; i++)  
  377.             {  
  378.                 _sortedList.Add(i, _NoSortIndexData.Next(0, 999999));  
  379.             }  
  380.   
  381.             sw.Stop();  
  382.             string _strMessage = "SortIndexSortedList cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  383.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  384.   
  385.             sw.Reset();  
  386.             sw.Restart();  
  387.   
  388.             foreach (var _v in _sortedList)  
  389.             {  
  390.                 if (_v.Key == (_DataCount / 2))  
  391.                 {  
  392.                     break;  
  393.                 }  
  394.             }  
  395.   
  396.             sw.Stop();  
  397.             _strMessage = "SortIndexSortedList find key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  398.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  399.   
  400.             sw.Reset();  
  401.             sw.Restart();  
  402.   
  403.             _sortedList.Remove(_DataCount / 2);  
  404.   
  405.             sw.Stop();  
  406.             _strMessage = "SortIndexSortedList remove key value whith " + (_DataCount / 2).ToString() + " cost: " + sw.Elapsed.TotalMilliseconds.ToString() + " ms";  
  407.             ControlsCallBackFunction(_lsbResult.First(_ => _.Name == "lsbSortedListResult"), _strMessage);  
  408.         }  
  409.         #endregion // Work  
  410.  
  411.         #region Create Controls  
  412.   
  413.         private void CreateButtonWithTestUI()  
  414.         {  
  415.             _btnTestUI = new Button();  
  416.             _btnTestUI.Name = "btnTestUI";  
  417.             _btnTestUI.Text = "Test UI";  
  418.             _btnTestUI.Location = new Point(this.Width - 100, this.Height - 100);  
  419.             _btnTestUI.Click += _btnTestUI_Click;  
  420.   
  421.             this.Controls.Add(_btnTestUI);  
  422.         }  
  423.   
  424.         private void CreateLabelWithTitle(int _total)  
  425.         {  
  426.             _lblTitle = new Label[_total];  
  427.             for (int i = 0; i < _total; i++)  
  428.             {  
  429.                 _lblTitle[i] = new Label();  
  430.                 switch (i)  
  431.                 {  
  432.                     case 0:  
  433.                         _lblTitle[i].Name = "lblDataCount";  
  434.                         _lblTitle[i].Text = "Data Count:";  
  435.                         _lblTitle[i].Location = new Point(20, 20);  
  436.                         _lblTitle[i].Size = new Size(100, 20);  
  437.                         break;  
  438.                     case 1:  
  439.                         _lblTitle[i].Name = "lblDictionaryResult";  
  440.                         _lblTitle[i].Text = "Dictionary Result:";  
  441.                         _lblTitle[i].Location = new Point(20, 200);  
  442.                         _lblTitle[i].Size = new Size(100, 20);  
  443.                         break;  
  444.                     case 2:  
  445.                         _lblTitle[i].Name = "lblSortedDictionaryResult";  
  446.                         _lblTitle[i].Text = "Sorted Dictionary Result:";  
  447.                         _lblTitle[i].Location = new Point(20, 350);  
  448.                         _lblTitle[i].Size = new Size(100, 20);  
  449.                         break;  
  450.                     case 3:  
  451.                         _lblTitle[i].Name = "lblSortedListResult";  
  452.                         _lblTitle[i].Text = "Sorted List Result:";  
  453.                         _lblTitle[i].Location = new Point(20, 500);  
  454.                         _lblTitle[i].Size = new Size(100, 20);  
  455.                         break;  
  456.                 }  
  457.   
  458.                 this.Controls.Add(_lblTitle[i]);  
  459.             }  
  460.         }  
  461.   
  462.         private void CreateNumericUpDownWithDataCount(int _total)  
  463.         {  
  464.             _nudDataCount = new NumericUpDown[_total];  
  465.             for (int i = 0; i <_total; i++)  
  466.             {  
  467.                 _nudDataCount[i] = new NumericUpDown();  
  468.                 switch (i)  
  469.                 {  
  470.                     case 0:  
  471.                         _nudDataCount[i].Name = "nudDataCount";  
  472.                         _nudDataCount[i].Value = 100;  
  473.                         _nudDataCount[i].Minimum = 1;  
  474.                         _nudDataCount[i].Maximum = 99999;  
  475.                         _nudDataCount[i].Location = new Point(130, 20);  
  476.                         _nudDataCount[i].Size = new Size(100, 20);  
  477.                         break;  
  478.                 }  
  479.   
  480.                 this.Controls.Add(_nudDataCount[i]);  
  481.             }  
  482.         }  
  483.   
  484.         private void CreateButtonWithWork(int _total)  
  485.         {  
  486.             _btnWork = new Button[_total];  
  487.             for (int i = 0; i < _total; i++)  
  488.             {  
  489.                 _btnWork[i] = new Button();  
  490.                 switch (i)  
  491.                 {  
  492.                     case 0:  
  493.                         _btnWork[i].Name = "btnNoSortDictionary";  
  494.                         _btnWork[i].Text = "No Sort Index Dictionary";  
  495.                         _btnWork[i].Location = new Point(20, 45);  
  496.                         _btnWork[i].Size = new Size(170, 20);  
  497.                         break;  
  498.                     case 1:  
  499.                         _btnWork[i].Name = "btnNoSortSortedDictionary";  
  500.                         _btnWork[i].Text = "No Sort Index SortedDictionary";  
  501.                         _btnWork[i].Location = new Point(20, 70);  
  502.                         _btnWork[i].Size = new Size(170, 20);  
  503.                         break;  
  504.                     case 2:  
  505.                         _btnWork[i].Name = "btnNoSortSortedList";  
  506.                         _btnWork[i].Text = "No Sort Index SortedList";  
  507.                         _btnWork[i].Location = new Point(20, 95);  
  508.                         _btnWork[i].Size = new Size(170, 20);  
  509.                         break;  
  510.                     case 3:  
  511.                         _btnWork[i].Name = "btnSortDictionary";  
  512.                         _btnWork[i].Text = "Sort Index Dictionary";  
  513.                         _btnWork[i].Location = new Point(20, 120);  
  514.                         _btnWork[i].Size = new Size(170, 20);  
  515.                         break;  
  516.                     case 4:  
  517.                         _btnWork[i].Name = "btnSortSortedDictionary";  
  518.                         _btnWork[i].Text = "Sort Index SortedDictionary";  
  519.                         _btnWork[i].Location = new Point(20, 145);  
  520.                         _btnWork[i].Size = new Size(170, 20);  
  521.                         break;  
  522.                     case 5:  
  523.                         _btnWork[i].Name = "btnSortSortedList";  
  524.                         _btnWork[i].Text = "Sort Index SortedList";  
  525.                         _btnWork[i].Location = new Point(20, 170);  
  526.                         _btnWork[i].Size = new Size(170, 20);  
  527.                         break;  
  528.                 }  
  529.                 _btnWork[i].Click += _btnWork_Click;  
  530.   
  531.                 this.Controls.Add(_btnWork[i]);                  
  532.             }  
  533.         }  
  534.   
  535.         private void CreateListBoxWithResult(int _total)  
  536.         {  
  537.             _lsbResult = new ListBox[_total];  
  538.             for (int i = 0; i < _total; i++)  
  539.             {  
  540.                 _lsbResult[i] = new ListBox();  
  541.                 switch (i)  
  542.                 {  
  543.                     case 0:  
  544.                         _lsbResult[i].Name = "lsbDictionaryResult";  
  545.                         _lsbResult[i].HorizontalScrollbar = true;  
  546.                         _lsbResult[i].Location = new Point(20, 220);  
  547.                         _lsbResult[i].Size = new Size(500, 130);  
  548.                         break;  
  549.                     case 1:  
  550.                         _lsbResult[i].Name = "lsbSortedDictionaryResult";  
  551.                         _lsbResult[i].HorizontalScrollbar = true;  
  552.                         _lsbResult[i].Location = new Point(20, 370);  
  553.                         _lsbResult[i].Size = new Size(500, 130);  
  554.                         break;  
  555.                     case 2:  
  556.                         _lsbResult[i].Name = "lsbSortedListResult";  
  557.                         _lsbResult[i].HorizontalScrollbar = true;  
  558.                         _lsbResult[i].Location = new Point(20, 520);  
  559.                         _lsbResult[i].Size = new Size(500, 130);  
  560.                         break;  
  561.                 }  
  562.   
  563.                 this.Controls.Add(_lsbResult[i]);  
  564.             }  
  565.         }  
  566.         #endregion // Create Controls  
  567.  
  568.         #endregion // Functions  
  569.   
  570.     }  
  571. }


沒有留言:

張貼留言