最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)List.Sort()使用小計

 更新時間:2023年12月12日 09:36:52   作者:bughunter-  
在C#開發(fā)中,List是常見的一種集合類型,其提供了一個 Sort() 方法來實現(xiàn)對集合的排序,本文主要介紹了C#實現(xiàn)List.Sort()使用小計,具有一定的參考價值,感興趣的可以了解一下

1、使用List.Sort()對基本數(shù)值類型數(shù)據(jù)進行排序

案例:對存放int數(shù)據(jù)的List進行排序

其實C#中的List的Sort函數(shù)中的比較函數(shù)CompareTo有三種結(jié)果 1, -1 ,0分別代表大,小,相等。默認List的排序是升序排序。

舉個例子:在比較函數(shù)CompareTo()中,如果 x>y return 1;則是按照升序排列。如果x>y return -1;則是按照降序排列。這就是1和-1大小的含義。其實你非要這么寫 x<y return 1;則也表示降序排列。不過大家一般習慣x>y return 1;升序,如果想要降序只需return -1;即可。

Tips:系統(tǒng)List默認的排序是升序,如果你想要降序,可以直接在比較函數(shù)前面加個負號,把返回結(jié)果由1變成-1即可。例如:

List<int> list = new List<int>() { 2, 1, 3, 4, 5 };
list.Sort((x, y) => -x.CompareTo(y));	
for (int i = 0; i < list.Count(); i++)
{
    Console.Write(list[i] + " ");
}
Console.WriteLine();

2、使用List.Sort()對非數(shù)值類型、string、結(jié)構(gòu)體、對象等或者官方未實現(xiàn)IComparable接口的類型進行排序

案例:
假設我們目前有一個Person類和存放Person類數(shù)據(jù)的List,如下

public class Person
{
    public int id;
    public string name;

    public Person()
    {
        id = 0;
        name = "name";
    }
    public Person(int id_, string name_)
    {
        id = id_;
        name = name_;
    }
 }


static void Main(string[] args)
{
    List<Person> list2 = new List<Person>();
    list2.Add(new Person(10001, "Tom"));
    list2.Add(new Person(10003, "Jerry"));
    list2.Add(new Person(10002, "Ben"));
    list2.Add(new Person(10005, "Cat"));
    list2.Add(new Person(10004, "Danny"));
}

假設我們現(xiàn)在的需求是將這個其按照id從小到大進行排序。
我們有兩種辦法:

方法一:實現(xiàn)IComparable接口重寫CompareTo方法

代碼:

public class Person : IComparable<Person>
{
    public int id;
    public string name;

    public Person()
    {
        id = 0;
        name = "name";
    }
    public Person(int id_, string name_)
    {
        id = id_;
        name = name_;
    }

    public int CompareTo(Person obj_)
    {
        if (this.id > obj_.id)
            return 1;
        else
            return -1;
    }
}

static void Main(string[] args)
{
    List<int> list = new List<int>() { 2, 1, 3, 4, 5 };
    list.Sort((x, y) => -x.CompareTo(y));
    for (int i = 0; i < list.Count(); i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
    Console.WriteLine();

    List<Person> list2 = new List<Person>();
    list2.Add(new Person(10001, "Tom"));
    list2.Add(new Person(10003, "Jerry"));
    list2.Add(new Person(10002, "Ben"));
    list2.Add(new Person(10005, "Cat"));
    list2.Add(new Person(10004, "Danny"));
    // List.Sort自定義對象結(jié)構(gòu)體排序規(guī)則的第一種辦法:在類中實現(xiàn)IComparable接口
    list2.Sort();
    for (int i = 0; i < list2.Count(); i++)
    {
        Console.WriteLine(list2[i].id + " " + list2[i].name);
    }
    Console.WriteLine();
}

方法二:編寫一個排序規(guī)則的函數(shù),調(diào)用LIst.Sort()時將其傳入

代碼:

public class Person
{
     public int id;
     public string name;

     public Person()
     {
         id = 0;
         name = "name";
     }
     public Person(int id_, string name_)
     {
         id = id_;
         name = name_;
     }
}

private static int CmpFun(Person a, Person b)
{
    if (a.id > b.id)
        return 1;
    else
        return -1;
}


static void Main(string[] args)
{
    List<Person> list2 = new List<Person>();
    list2.Add(new Person(10001, "Tom"));
    list2.Add(new Person(10003, "Jerry"));
    list2.Add(new Person(10002, "Ben"));
    list2.Add(new Person(10005, "Cat"));
    list2.Add(new Person(10004, "Danny"));
	
	// List.Sort自定義對象結(jié)構(gòu)體排序規(guī)則的第二種辦法:寫一個排序的規(guī)則函數(shù),將其傳入
    list2.Sort(CmpFun);
    for (int i = 0; i < list2.Count(); i++)
    {
        Console.WriteLine(list2[i].id + " " + list2[i].name);
    }
    Console.WriteLine();
}

請注意,在不帶括號的情況下使用方法名稱。 將方法用作參數(shù)會告知編譯器將方法引用轉(zhuǎn)換為可以用作委托調(diào)用目標的引用,并將該方法作為調(diào)用目標進行附加。

到此這篇關于C#實現(xiàn)List.Sort()使用小計的文章就介紹到這了,更多相關C# List.Sort()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#版Tesseract庫的使用技巧

    C#版Tesseract庫的使用技巧

    本文給大家分享C#版Tesseract庫的使用技巧,在這里大家需要注意一下tesseract的識別語言包要自己下載后包含到項目里面,并設置為始終復制,或者直接把這個文件包放到運行程序目錄(bin\debug)下的,具體實現(xiàn)代碼跟隨小編一起學習下吧
    2021-05-05
  • C#實現(xiàn)簡單的登錄界面

    C#實現(xiàn)簡單的登錄界面

    我們在使用C#做項目的時候,基本上都需要制作登錄界面,那么今天我們就來一步步看看,如果簡單的實現(xiàn)登錄界面呢,本文給出2個例子,由簡入難,希望大家能夠喜歡。
    2015-11-11
  • WPF實現(xiàn)好看的Loading動畫的示例代碼

    WPF實現(xiàn)好看的Loading動畫的示例代碼

    這篇文章主要介紹了如何利用WPF實現(xiàn)好看的Loading動畫效果,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下
    2022-08-08
  • C#中Shear的用法實例

    C#中Shear的用法實例

    這篇文章主要介紹了C#中Shear的用法,實例分析了C#中使用Matrix實現(xiàn)Shear剪切變換的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#二叉搜索樹算法實現(xiàn)步驟和實例代碼

    C#二叉搜索樹算法實現(xiàn)步驟和實例代碼

    二叉搜索樹(Binary?Search?Tree,簡稱BST)是一種節(jié)點有序排列的二叉樹數(shù)據(jù)結(jié)構(gòu),這篇文章主要介紹了C#二叉搜索樹算法實現(xiàn)步驟和實例代碼,需要的朋友可以參考下
    2024-08-08
  • C#利用com操作excel釋放進程的解決方法

    C#利用com操作excel釋放進程的解決方法

    最近利用Microsoft.Office.Interop.Excel.Application讀取一個excel后,進程中一直存在excel,在網(wǎng)上找了一陣子,其中有幾個解決方案
    2013-03-03
  • C#?WinForm實現(xiàn)檢查目標IP端口是否可連接

    C#?WinForm實現(xiàn)檢查目標IP端口是否可連接

    這篇文章主要為大家詳細介紹了如何基于C#?WinForm實現(xiàn)檢查目標IP端口是否可連接的小工具,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • c#基礎——了解程序結(jié)構(gòu)

    c#基礎——了解程序結(jié)構(gòu)

    這篇文章主要介紹了c# 程序結(jié)構(gòu)的相關資料,文中講解非常細致,幫助大家更好的理解和學習C#,感興趣的朋友可以了解下
    2020-07-07
  • .Net Winform開發(fā)筆記(四)透過現(xiàn)象看本質(zhì)

    .Net Winform開發(fā)筆記(四)透過現(xiàn)象看本質(zhì)

    本文將從Winform應用程序中的Program.cs文件的第一行代碼開始逐步分析一個Winform應用程序到底是怎樣從出生走向死亡
    2013-01-01
  • C#常用日期時間方法匯總

    C#常用日期時間方法匯總

    這篇文章介紹了C#常用的日期時間方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論

南阳市| 太保市| 襄樊市| 青田县| 广宁县| 涞源县| 大英县| 青铜峡市| 化德县| 德安县| 武鸣县| 娄烦县| 克山县| 滦平县| 宁蒗| 汕尾市| 拉萨市| 谢通门县| 玉环县| 深水埗区| 福海县| 巫溪县| 汉川市| 会东县| 宝山区| 黔江区| 合肥市| 大兴区| 新乡市| 东丽区| 龙游县| 武山县| 永川市| 都安| 伊宁县| 安阳市| 高碑店市| 长泰县| 卢氏县| 新化县| 濮阳县|