---
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://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)