|
|
|
|
|
|
對C# List集合進行排序,需要用到Sort()方法,默認情況下,Sort()是按升序排序,而有時我們要按降序排列時,寫法便有所不同了,甚至有時候要求按數字的第一位排序,寫法又會不一樣。

C# List Sort 數值排序
List按升序排序
C#有個函數Sort(),默認是按升序排序,可直接應用于對List集合的排序。
示例
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>() { 20, 10, 3, 40 };
numbers.Sort();
Console.WriteLine(":::按升序排序:::");
foreach (var result in numbers)
{
Console.WriteLine(result);
}
}
}
輸出結果
:::按升序排序:::
3
10
20
40
List按降序排序
要讓Sort()按降序排序,要用到CompareTo()比較函數。
C#中的List的Sort函數中的比較函數CompareTo有三種結果 1, -1 ,0分別代表大,小,相等。默認List的排序是升序排序。
在比較函數CompareTo()中,如果 x>y return 1;則是按照升序排列。如果x>y return -1;則是按照降序排列。這就是1和-1大小的含義。其實你非要這么寫 x<y return 1;則也表示降序排列。不過大家一般習慣x>y return 1;升序,如果想要降序只需return -1;即可。
系統List默認的排序是升序,如果你想要降序,可以直接在比較函數前面加個負號,把返回結果由1變成-1即可。
示例
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>() { 20, 10, 3, 40 };
numbers.Sort((x, y) => -x.CompareTo(y));
Console.WriteLine(":::按降序排序:::");
foreach (var result in numbers)
{
Console.WriteLine(result);
}
}
}
輸出結果
:::按降序排序:::
40
20
10
3
List按數字的第一位排序
有時候,需要按數字的第一位排序時,又該怎樣寫這個代碼呢?
其實,我們只需把集合的元素第一位先轉化為字符,再進行排序,即可。
示例
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>() { 20, 10, 3, 40 };
numbers.Sort((a, b) => (a.ToString()[0].CompareTo(b.ToString()[0])));
Console.WriteLine(":::按數字的第一位排序:::");
foreach (var result in numbers)
{
Console.WriteLine(result);
}
}
}
輸出結果
:::按數字的第一位排序:::
10
20
3
40
