--- title: C# List,排序(Sort) tags: List,C#,open description: LOG --- > [name=Jiesen] [time= 20210824 ] [color=#907bf7] [TOC] # 前言 有時的資料室透過API取的,所以無法直接對SQL 下排序的語法,如果API給的資料不符合我們要的排序方式時就得用程式來排序,我這邊選擇用List來對資料做排序 # List 排序關鍵程式碼範列 ```C# List<ListSortTestMode> listStr = new List<ListSortTestMode>();//input : 4,7,3 (以id排序) //x.id.CompareTo(y.id) 對id做排序的意思 liststr.Sort((x, y) => x.id.CompareTo(y.id)); //output: 3,4,7 liststr.Sort((x, y) => -x.id.CompareTo(y.id)); //output: 7,4,3 ``` # 轉型 如果排序的欄位,資料型態為string的數字,要將x與y轉型成int在做排序不然排序會出現, 1 10 2 這種順序 ## 轉型範例如下 ```C# List<ListSortTestMode> listStr = new List<ListSortTestMode>(); //input : 4,7,3 (以id排序) liststr.Sort((x, y) => int.Parse(x.id).CompareTo(int.Parse(y.id))); //output: 3,4,7 liststr.Sort((x, y) => -int.Parse(x.id).CompareTo(int.Parse(y.id))); //output: 7,4,3 ``` # 完整程式測試範列 ```C# class ListSortTestMode { public string name { get; set; }//名稱 public int id { get; set; } //編號 } ``` ```C# List<ListSortTestMode> list = new List<ListSortTestMode>(); ListSortTestMode obja = new ListSortTestMode(); obja.id = 2; obja.name = "b"; list.Add(obja); ListSortTestMode objb = new ListSortTestMode(); objb.id = 1; objb.name = "a"; list.Add(objb); for (int i=0; i< list.Count; i++) { Console.WriteLine($"[{i}]=id={list[i].id},name={list[i].name}"); } Console.WriteLine("執行list.Sort((x,y)=>x.id.CompareTo(y.id));後"); //x.id.CompareTo(y.id) 對id做排序的意思 list.Sort((x,y)=>x.id.CompareTo(y.id)); for (int i = 0; i < list.Count; i++) { Console.WriteLine($"[{i}]=id={list[i].id},name={list[i].name}"); } Console.ReadKey(); ``` ## 執行結果: ![](https://i.imgur.com/HPe3g9G.png) # 參考網站 [微軟官方](https://docs.microsoft.com/zh-tw/dotnet/api/system.collections.generic.list-1.sort?view=netframework-4.8) [C# List 如何排序?](https://dotblogs.com.tw/shanna/2019/09/09/213800)