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

C#實(shí)現(xiàn)集合自定義排序的三種方式

 更新時(shí)間:2025年01月24日 10:49:56   作者:AitTech  
在C#中,集合排序是一種常見的操作,它可以幫助我們對(duì)集合中的元素進(jìn)行排序,C#中提供了多種集合排序方法,包括Array.Sort、List.Sort、SortedList和SortedSet等,本文給大家介紹了C#實(shí)現(xiàn)集合自定義排序的三種方式,需要的朋友可以參考下

可以通過(guò)多種方式實(shí)現(xiàn)集合的自定義排序。以下是一些常見的方法:

1. 使用 List<T>.Sort 方法與自定義比較器

List<T> 類提供了一個(gè) Sort 方法,它允許傳遞一個(gè) IComparer<T> 接口的實(shí)現(xiàn)來(lái)自定義排序邏輯。

using System;
using System.Collections.Generic;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class PersonComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        // 按年齡升序排序
        return x.Age.CompareTo(y.Age);
        
        // 如果想按名字排序,可以這樣做:
        // return x.Name.CompareTo(y.Name);
        
        // 或者,可以實(shí)現(xiàn)更復(fù)雜的排序邏輯
    }
}

class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        people.Sort(new PersonComparer());

        foreach (var person in people)
        {
            Console.WriteLine($"{person.Name}, {person.Age}");
        }
    }
}

2. 使用 LINQ 的 OrderBy 方法與自定義鍵選擇器

如果不需要就地排序(即不修改原始集合),而是想創(chuàng)建一個(gè)已排序的新集合,可以使用 LINQ 的 OrderBy 方法??梢詡鬟f一個(gè)鍵選擇器函數(shù)來(lái)自定義排序邏輯。

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var people = new List<Person>
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        var sortedPeople = people.OrderBy(p => p.Age).ToList();

        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.Name}, {person.Age}");
        }
    }
}

如果想按多個(gè)屬性排序,可以使用 ThenBy 方法:

var sortedPeople = people.OrderBy(p => p.Age).ThenBy(p => p.Name).ToList();

3. 實(shí)現(xiàn) IComparable<T> 接口

如果你的類本身就應(yīng)該有一個(gè)默認(rèn)的排序順序,可以讓該類實(shí)現(xiàn) IComparable<T> 接口。這通常用于希望類的實(shí)例在任何情況下都按照相同的邏輯排序時(shí)。

public class Person : IComparable<Person>
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        if (other == null) return 1;
        return this.Age.CompareTo(other.Age);
    }
}

// 然后可以直接使用 Sort 方法,不需要傳遞比較器
people.Sort();

注意,實(shí)現(xiàn) IComparable<T> 接口時(shí)也應(yīng)該重寫 Object.Equals 和 Object.GetHashCode 方法,以保持一致性,特別是在集合操作中(如使用哈希表時(shí))。然而,對(duì)于排序目的,只實(shí)現(xiàn) IComparable<T> 就足夠了。

以上就是C#實(shí)現(xiàn)集合自定義排序的三種方式的詳細(xì)內(nèi)容,更多關(guān)于C#集合自定義排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中的并發(fā)集合Concurrent類

    C#中的并發(fā)集合Concurrent類

    這篇文章介紹了C#中的并發(fā)集合Concurrent類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#中WPF依賴屬性的正確學(xué)習(xí)方法

    C#中WPF依賴屬性的正確學(xué)習(xí)方法

    這篇文章主要介紹了C#中WPF依賴屬性的正確學(xué)習(xí)方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 詳解c# PLINQ中的分區(qū)

    詳解c# PLINQ中的分區(qū)

    這篇文章主要介紹了c# PLINQ中的分區(qū)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 利用C#實(shí)現(xiàn)獲取與監(jiān)控電腦系統(tǒng)信息

    利用C#實(shí)現(xiàn)獲取與監(jiān)控電腦系統(tǒng)信息

    在C#中,獲取與監(jiān)控電腦系統(tǒng)信息通??梢酝ㄟ^(guò)多種方式實(shí)現(xiàn),這篇文章主要為大家整理了幾種常見的方法及其示例代碼,希望對(duì)大家有所幫助
    2024-11-11
  • 使用C#代碼修改Word文檔中的內(nèi)容控件

    使用C#代碼修改Word文檔中的內(nèi)容控件

    本文介紹了如何在C#項(xiàng)目中使用Spire.Docfor.NET庫(kù)對(duì)Word文檔中的內(nèi)容控件進(jìn)行修改,包括修改正文、段落、表格行、單元格以及單元格內(nèi)的內(nèi)容控件等內(nèi)容控件的具體步驟和示例代碼,需要的朋友可以參考下
    2026-04-04
  • C#Button窗體常用屬性及事件詳解

    C#Button窗體常用屬性及事件詳解

    在本篇文章里小編給各位分享的是關(guān)于C#Button窗體常用屬性及事件詳解,需要的朋友們可以參考下。
    2020-03-03
  • C#使用HttpClient進(jìn)行Post請(qǐng)求出現(xiàn)超時(shí)問題的解決及優(yōu)化

    C#使用HttpClient進(jìn)行Post請(qǐng)求出現(xiàn)超時(shí)問題的解決及優(yōu)化

    最近我的控制臺(tái)程序發(fā)現(xiàn)有時(shí)候總是出現(xiàn)請(qǐng)求超時(shí)等問題,通常好幾分鐘最多只有3-4個(gè)請(qǐng)求,在使用apipost發(fā)現(xiàn)并發(fā)10個(gè)5分鐘也沒有問題,那么問題就出在我的請(qǐng)求端了,所以本文給大家介紹了C# 使用HttpClient進(jìn)行Post請(qǐng)求總是出現(xiàn)超時(shí)問題的優(yōu)化,需要的朋友可以參考下
    2025-01-01
  • c#如何用好垃圾回收機(jī)制GC

    c#如何用好垃圾回收機(jī)制GC

    這篇文章主要介紹了c# 如何用好垃圾回收機(jī)制GC,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C#新手常犯的錯(cuò)誤匯總

    C#新手常犯的錯(cuò)誤匯總

    這篇文章主要介紹了C#新手常犯的錯(cuò)誤匯總,對(duì)于經(jīng)驗(yàn)豐富的C#程序員同樣具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • WPF InkCanvas基本操作方法詳解

    WPF InkCanvas基本操作方法詳解

    這篇文章主要為大家詳細(xì)介紹了WPF InkCanvas基本的操作方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評(píng)論

大连市| 岐山县| 乐业县| 禄劝| 鹤山市| 金寨县| 陵川县| 中牟县| 商洛市| 浦北县| 张家港市| 大连市| 安溪县| 宁津县| 虹口区| 凤阳县| 都昌县| 连南| 舒城县| 长岛县| 康定县| 江达县| 红河县| 牙克石市| 东海县| 文安县| 印江| 宁安市| 黑山县| 舞阳县| 柳林县| 永吉县| 法库县| 合阳县| 四会市| 岢岚县| 柏乡县| 祁阳县| 新蔡县| 乌海市| 临朐县|