亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)集合自定義排序的三種方式,需要的朋友可以參考下

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

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

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

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 方法。可以傳遞一個(gè)鍵選擇器函數(shù)來自定義排序邏輯。

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#基于時(shí)間輪調(diào)度實(shí)現(xiàn)延遲任務(wù)詳解

    C#基于時(shí)間輪調(diào)度實(shí)現(xiàn)延遲任務(wù)詳解

    在很多.net開發(fā)體系中開發(fā)者在面對(duì)調(diào)度作業(yè)需求的時(shí)候一般會(huì)選擇三方開源成熟的作業(yè)調(diào)度框架來滿足業(yè)務(wù)需求,但是有些時(shí)候可能我們只是需要一個(gè)簡易的延遲任務(wù)。本文主要分享一個(gè)簡易的基于時(shí)間輪調(diào)度的延遲任務(wù)實(shí)現(xiàn),需要的可以參考一下
    2022-12-12
  • C#獲取文件MD5值的實(shí)現(xiàn)示例

    C#獲取文件MD5值的實(shí)現(xiàn)示例

    文件的md5值,即文件簽名,為了驗(yàn)證文件的正確性,是否被惡意篡改等。每個(gè)文件有一個(gè)唯一的md5。下面這篇文中就給大家介紹了如何利用C#獲取文件MD5值,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • WPF仿微信實(shí)現(xiàn)截圖功能的方法詳解

    WPF仿微信實(shí)現(xiàn)截圖功能的方法詳解

    這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)截圖功能(仿微信),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • 使用C#高效解析HTML的實(shí)戰(zhàn)指南

    使用C#高效解析HTML的實(shí)戰(zhàn)指南

    在網(wǎng)頁開發(fā)和數(shù)據(jù)處理的場景中,經(jīng)常需要從 HTML 文檔里提取有用的信息,C# 作為一門強(qiáng)大的編程語言,提供了豐富的工具和庫來實(shí)現(xiàn) HTML 的解析,這篇博客就帶你深入了解如何使用 C# 高效地解析 HTML
    2025-01-01
  • C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序

    C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序

    這篇文章主要介紹了C#使用timer實(shí)現(xiàn)的簡單鬧鐘程序,涉及timer控件的使用及音頻文件的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Unity多屏幕設(shè)置的具體方案

    Unity多屏幕設(shè)置的具體方案

    多屏幕指的是一個(gè)電腦主機(jī),連接多個(gè)顯示器,本文主要介紹了Unity多屏幕設(shè)置的具體方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • c#泛型學(xué)習(xí)詳解 創(chuàng)建線性鏈表

    c#泛型學(xué)習(xí)詳解 創(chuàng)建線性鏈表

    Visual C# 2.0 的一個(gè)最受期待的(或許也是最讓人畏懼)的一個(gè)特性就是對(duì)于泛型的支持。這篇文章將告訴你泛型用來解決什么樣的問題,以及如何使用它們來提高你的代碼質(zhì)量,還有你不必恐懼泛型的原因
    2014-01-01
  • C#雙向鏈表LinkedList排序?qū)崿F(xiàn)方法

    C#雙向鏈表LinkedList排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了C#雙向鏈表LinkedList排序?qū)崿F(xiàn)方法,涉及C#雙向鏈表的定義與排序技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C# WinForm 判斷程序是否已經(jīng)在運(yùn)行,且只允許運(yùn)行一個(gè)實(shí)例,附源碼

    C# WinForm 判斷程序是否已經(jīng)在運(yùn)行,且只允許運(yùn)行一個(gè)實(shí)例,附源碼

    本文主要介紹WinFrom程序中只允許運(yùn)行一個(gè)實(shí)例的方法,并有完整的代碼示例,希望能給需要的朋友一些幫助。
    2016-04-04
  • C#實(shí)現(xiàn)電腦麥克風(fēng)錄音

    C#實(shí)現(xiàn)電腦麥克風(fēng)錄音

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)電腦麥克風(fēng)錄音,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論