創作內容

15 GP

C# List Sorting

作者:貓貓風 ฅ●ω●ฅ│2019-02-25 14:19:39│巴幣:30│人氣:1139
.

















List 是在程式開發中很常使用到的資料結構之一

在資料處理方面,可加入的資料類型種類非常多

如果以現有的規則進行排序,可能會無法達成需求

因此需要自訂規則來進行排序

以下主要介紹四種 List的排序方式

1. 使用  IComparer
主要為提供集合的排序,針對不同資料型態,會有不同的排序方法
例如 int 提供按整數大小進行排序;如果為 String則提供 字母 A - Z 的排序方法

2. 使用 LinQ
LINQ全名為Language Integrated Query
利用標準查詢運算子(Standard Query Operators)可以用原生的C#語言對資料做處理,選擇資料來源、進行篩選到組合、分組都可以利用標準查詢運算子完成,而且在撰寫的過程中還可以得到型別檢查及自動完成帶來的便捷

3. 使用 delegate
此方法為第一種方法的簡化寫法,在第一種寫法中
需要再建立一個新的class才可以使用,使用上較複雜且不易維護
使用委派則可直接對資料進行處理而不需透過class進行

4. 使用Lambda
此方法屬於 LinQ中的一種表達式
也算是一種委派的方法
功能上算是前兩者的綜合體


以下為實作程式碼


  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.Windows.Forms;  
  9.   
  10. namespace List_Sorting  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         private List<String> _LS = new List<String>();  
  15.         private List<String> _origin_LS = new List<String>();  
  16.         private Random _R = new Random();  
  17.   
  18.         public Form1()  
  19.         {  
  20.             InitializeComponent();  
  21.         }  
  22.   
  23.         private void Form1_Load(object sender, EventArgs e)  
  24.         {  
  25.             label1.Text = "List All Member:\n(Unsort)";  
  26.             label2.Text = "Sort Method 1\nIComparer";  
  27.             label3.Text = "Sort Method 2\nlinQ";  
  28.             label4.Text = "Sort Method 3\ndelegate";  
  29.             label5.Text = "Sort Method 4\nLambda";  
  30.               
  31.             _LS.Add("19_02_27_10");  
  32.             _LS.Add("20_02_25_02");  
  33.             _LS.Add("18_02_26_05");  
  34.             _LS.Add("03_02_25_12");  
  35.             _LS.Add("01_02_27_11");  
  36.             _LS.Add("03_02_11_01");  
  37.             _LS.Add("02_02_13_05");  
  38.             _LS.Add("09_02_19_11");  
  39.             _LS.Add("05_02_28_15");  
  40.             _LS.Add("33_02_25_16");  
  41.   
  42.             _origin_LS = _LS.GetRange(0, _LS.Count); //backup  
  43.   
  44.             list_all_element(richTextBox1, _LS);  
  45.   
  46.             //sort method1 using IComparer  
  47.             _LS.Sort(new ListComparer()); // 依照前兩碼進行排序  
  48.             list_all_element(richTextBox2, _LS);  
  49.   
  50.             recover_list_sorting();  
  51.   
  52.             //sort method2 using linQ  
  53.             var result = from element in _LS  
  54.                          orderby element.Substring(6, 5) // 依照後五碼進行排序  
  55.                          select element;  
  56.             int i = 0;  
  57.             foreach (String element in result)  
  58.             {  
  59.                 _LS[i] = element;  
  60.                 i++;  
  61.             }  
  62.             list_all_element(richTextBox3, _LS);  
  63.   
  64.             //sort method3 using delegate  
  65.             _LS.Sort(delegate(String E1, String E2) { return E1.CompareTo(E2); });  
  66.             list_all_element(richTextBox4, _LS);  
  67.   
  68.             //sort method4 using Lambda  
  69.             _LS.Sort((String E1, String E2)
  70.              => E1.Substring(9, 2).CompareTo(E2.Substring(9, 2)));
  71.              // 依照後兩碼進行排序  
  72.             list_all_element(richTextBox5, _LS);  
  73.         }  
  74.   
  75.         private void recover_list_sorting()  
  76.         {  
  77.             _LS = _origin_LS;  
  78.         }  
  79.   
  80.         private void list_all_element(RichTextBox Rtxt, List<String> ls)  
  81.         {  
  82.             foreach (String item in _LS)  
  83.             {  
  84.                 Rtxt.Text += item+ "\n";  
  85.             }  
  86.         }  
  87.   
  88.         public class ListComparer : IComparer<String>  
  89.         {  
  90.             public int Compare(String LS_E1, String LS_E2)  
  91.             {  
  92.                 return LS_E1.CompareTo(LS_E2);  
  93.             }  
  94.         }  
  95.     }  
  96. }  

執行結果


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4306004
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:涼涼風|C#

留言共 1 篇留言

小刀
好厲害~是說我高職是資料處理科,那些我都看不懂~

02-25 19:42

貓貓風 ฅ●ω●ฅ
有興趣我可以教刀姊owo02-25 20:19
我要留言提醒:您尚未登入,請先登入再留言

15喜歡★s1234567 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:C# 可輸入數值彈跳視... 後一篇:TOYO 夾爪控制系統開...

追蹤私訊切換新版閱覽

作品資料夾

dhreekingdon幸運看見的你
給你一顆紅心~讓你能保有一整天的好心情~祝你有個愉快的一天喲(<ゝω・)~❤看更多我要大聲說昨天22:59


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】