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

C#中比較兩個List是否相等的常見方法

 更新時間:2025年04月17日 08:28:44   作者:唐青楓  
在?C#?里,比較兩個?List?是否相等,需要考慮多個方面,例如列表中的元素順序、元素本身是否相等,下面介紹幾種常見的比較方法,需要的朋友可以參考下

簡介

在 C# 里,比較兩個 List 是否相等,需要考慮多個方面,例如列表中的元素順序、元素本身是否相等。下面介紹幾種常見的比較方法:

基本類型比較(元素順序必須一致)

var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 1, 2, 3 };

bool areEqual = list1.SequenceEqual(list2); // ? true

忽略順序比較

var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 3, 2, 1 };

bool areEqual = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x)); // ? true

或先分別排完序,再比較:

list3.Sort();
list4.Sort();
Console.WriteLine(list3.SequenceEqual(list4)); // 輸出: True

復雜類型(自定義對象列表)

  • 實現(xiàn) Equals 和 GetHashCode 方法
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object? obj)
    {
        if (obj is Person person)
        {
            return Name == person.Name && Age == person.Age;
        }
        return false;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}

使用:

Console.WriteLine(person1.SequenceEqual(person2)); // 輸出: True
  • 自定義比較器:
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class PersonComparer : IEqualityComparer<Person>
{
    public bool Equals(Person? x, Person? y)
    {
        return x?.Name == y?.Name && x?.Age == y?.Age;
    }

    public int GetHashCode(Person obj)
    {
        return HashCode.Combine(obj.Name, obj.Age);
        // 還有一種寫法:
        // return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();
    }
}

使用方式:

var list1 = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 }
};

var list2 = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 }
};

bool areEqual = list1.SequenceEqual(list2, new PersonComparer()); // ? true

判斷是否完全包含對方(不關(guān)心順序)

bool setEqual = list1.Count == list2.Count &&
                !list1.Except(list2).Any() &&
                !list2.Except(list1).Any();

使用 SetEquals(無序、無重復判斷)

bool areEqual = new HashSet<int>(list1).SetEquals(list2);

或:

HashSet<int> set1 = new HashSet<int>(list3);
HashSet<int> set2 = new HashSet<int>(list4);

bool isEqual = set1.SetEquals(set2);
Console.WriteLine(isEqual); // 輸出: True

比較兩個 null 列表

List<int>? list5 = null;
List<int>? list6 = null;
Console.WriteLine(list5 == list6); // 輸出: True

比較兩個包含null元素的列表

List<string?> list7 = new List<string?> { "a", null };
List<string?> list8 = new List<string?> { "a", null };
Console.WriteLine(list7.SequenceEqual(list8)); // 輸出: True

性能優(yōu)化建議

  • 小規(guī)模數(shù)據(jù):使用 SequenceEqualHashSet。

  • 大規(guī)模數(shù)據(jù):

    • 先檢查列表長度是否相同。
    • 使用并行化處理(如 AsParallel().SequenceEqual())。

總結(jié)

場景方法是否考慮順序是否考慮重復次數(shù)
順序敏感且內(nèi)容相同SequenceEqual
順序不敏感且內(nèi)容相同HashSet.SetEquals
順序不敏感但重復次數(shù)相同排序后使用 SequenceEqual
自定義對象比較重寫 Equals 或使用 IEqualityComparer可配置可配置

到此這篇關(guān)于C#中比較兩個List是否相等的常見方法的文章就介紹到這了,更多相關(guān)C#比較兩個List相等內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 中使用NModbus4通信庫執(zhí)行寫操作

    C# 中使用NModbus4通信庫執(zhí)行寫操作

    在C#中NModbus4庫提供了一個方便的方式來與支持Modbus協(xié)議的設備進行交互,本文就來介紹了使用NModbus4通信庫執(zhí)行寫操作,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • WPF用狀態(tài)模式開發(fā)截圖功能

    WPF用狀態(tài)模式開發(fā)截圖功能

    狀態(tài)模式是設計模式中的一種行為設計模式,尤其在游戲中開發(fā)中還是比較常見的,本文將通過狀態(tài)模式開發(fā)一個截圖功能,有需要的小伙伴可以參考下
    2025-03-03
  • WPF使用webView實現(xiàn)顯示瀏覽器網(wǎng)頁

    WPF使用webView實現(xiàn)顯示瀏覽器網(wǎng)頁

    在WPF中顯示一個可以操作的瀏覽器界面,你可以使用WebBrowser控件或WebView2控件,下面我們就來看看如何分別使用這兩個控件實現(xiàn)顯示瀏覽器網(wǎng)頁吧
    2025-01-01
  • c#獲取gridview的值代碼分享

    c#獲取gridview的值代碼分享

    這篇文章主要介紹了C#如何在事件中獲得GridView里面TextBox的值,大家參考使用吧
    2013-12-12
  • C#裝箱與拆箱操作的深入講解

    C#裝箱與拆箱操作的深入講解

    這篇文章主要給大家介紹了關(guān)于C#裝箱與拆箱操作的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • C# WinForm狀態(tài)欄實時顯示當前時間(窗體狀態(tài)欄StatusStrip示例)

    C# WinForm狀態(tài)欄實時顯示當前時間(窗體狀態(tài)欄StatusStrip示例)

    這篇文章主要介紹了C# WinForm狀態(tài)欄實時顯示當前時間(窗體狀態(tài)欄StatusStrip示例),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 區(qū)分WCF與WebService的異同、優(yōu)勢

    區(qū)分WCF與WebService的異同、優(yōu)勢

    這篇文章主要幫助大家區(qū)分WCF與WebService的異同、優(yōu)勢,分為三大方面進行研究學習,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 深入理解C#中常見的委托

    深入理解C#中常見的委托

    本篇文章是對C#中常見的委托進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C#實現(xiàn)中文錄音文件轉(zhuǎn)為文本文字

    C#實現(xiàn)中文錄音文件轉(zhuǎn)為文本文字

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)把中文錄音文件(.mp3 .wav)轉(zhuǎn)為文本文字內(nèi)容,文中的示例代碼講解詳細,感興趣的小伙伴可以參考下
    2024-12-12
  • C#使用CancellationTokenSource 取消 Task的方法

    C#使用CancellationTokenSource 取消 Task的方法

    因為涉及到了日常經(jīng)常會碰到的取消任務操作,本文主要介紹了C#使用CancellationTokenSource 取消 Task,文中通過代碼介紹的非常詳細,感興趣的可以了解一下
    2022-02-02

最新評論

德清县| 雷州市| 大同县| 汤原县| 沾益县| 环江| 龙岩市| 新田县| 鹰潭市| 马鞍山市| 西城区| 五家渠市| 海原县| 来宾市| 枣阳市| 苏尼特右旗| 峨边| 图们市| 卢湾区| 健康| 东阿县| 十堰市| 扎囊县| 宜春市| 莒南县| 凤山县| 广河县| 阿合奇县| 上思县| 镇巴县| 西平县| 衡南县| 台江县| 华容县| 广平县| 襄汾县| 乌拉特中旗| 广水市| 衢州市| 西盟| 呼伦贝尔市|