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

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

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

簡(jiǎn)介

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

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

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

復(fù)雜類型(自定義對(duì)象列表)

  • 實(shí)現(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

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

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

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

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

比較兩個(gè) null 列表

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

比較兩個(gè)包含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ù):

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

    c#獲取gridview的值代碼分享

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

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

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

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

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

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

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

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

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

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

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

    C#使用CancellationTokenSource 取消 Task的方法

    因?yàn)樯婕暗搅巳粘=?jīng)常會(huì)碰到的取消任務(wù)操作,本文主要介紹了C#使用CancellationTokenSource 取消 Task,文中通過代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2022-02-02

最新評(píng)論

舞钢市| 平定县| 法库县| 虹口区| 宝应县| 高阳县| 绍兴市| 奉节县| 贡觉县| 新乡市| 安远县| 康定县| 惠来县| 华容县| 郓城县| 杭锦后旗| 禹城市| 云霄县| 大姚县| 浪卡子县| 盐山县| 江达县| 嘉兴市| 龙井市| 蛟河市| 乌苏市| 梁山县| 土默特左旗| 安平县| 南江县| 苏尼特左旗| 翁牛特旗| 怀仁县| 桃江县| 阿瓦提县| 丹寨县| 博野县| 长海县| 安阳县| 南阳市| 叙永县|