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

C#比較兩個List集合內(nèi)容是否相同的幾種方法

 更新時間:2025年02月09日 10:23:28   作者:xiaowu080  
本文詳細(xì)介紹了在C#中比較兩個List集合內(nèi)容是否相同的方法,包括非自定義類和自定義類的元素比較,對于非自定義類,可以使用SequenceEqual、排序后比較或HashSet來忽略重復(fù)元素,對于自定義類,需要重寫Equals和GetHashCode方法,然后使用相應(yīng)的比較方法

在 C# 中,要比較兩個 List<T> 集合的內(nèi)容是否相同,可以通過以下幾種方法:

 一、非自定義類的元素比較

1. 使用 SequenceEqual 方法(順序和內(nèi)容都相等)

順序和內(nèi)容都相等:使用 SequenceEqual

using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4 };
        List<int> list2 = new List<int> { 1, 2, 3, 4 };
 
        bool areEqual = list1.SequenceEqual(list2);
        Console.WriteLine($"Are the lists equal? {areEqual}");
    }
}

2. 自定義比較邏輯(如果順序不重要)

忽略順序:可以先對兩個列表排序后再使用 SequenceEqual。

using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4 };
        List<int> list2 = new List<int> { 4, 3, 2, 1 };
 
        bool areEqual = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
        Console.WriteLine($"Are the lists equal (ignoring order)? {areEqual}");
    }
}

3. 使用 Set 比較(忽略重復(fù)元素)

忽略重復(fù)元素:可以使用 HashSet<T>。

using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        List<int> list1 = new List<int> { 1, 2, 3, 4 };
        List<int> list2 = new List<int> { 4, 3, 2, 1 };
 
        bool areEqual = new HashSet<int>(list1).SetEquals(list2);
        Console.WriteLine($"Are the lists equal (ignoring duplicates)? {areEqual}");
    }
}

二、自定義類的元素比較

如果你想比較自定義對象的集合,比如 List<MyClass>,你需要自定義比較規(guī)則。默認(rèn)情況下,List<T> 的比較是基于對象引用的比較(即兩個對象的引用是否相同),而不是根據(jù)對象的內(nèi)容來判斷。

為了比較自定義元素,你需要重寫 Equals 和 GetHashCode 方法。這樣,比較時會依據(jù)你定義的規(guī)則進行比較。

假設(shè)你有一個自定義類 Person,你想根據(jù) Name 和 Age 屬性來判斷兩個 Person 對象是否相同。

重寫 Equals 和 GetHashCode

你需要重寫 Equals 方法來比較兩個對象是否相等,并且重寫 GetHashCode,以確保集合操作(如 HashSet 和 Except)正常工作。

1、Equals 方法比較兩個 Person 對象的 Name 和 Age 屬性。

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

2、GetHashCode 使用 HashCode.Combine 來生成一個基于 Name 和 Age 的哈希值,確保兩個內(nèi)容相同的 Person 對象具有相同的哈希值。

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

1. 順序和內(nèi)容都相等

順序和內(nèi)容都相等:使用 SequenceEqual

using System;
using System.Collections.Generic;
using System.Linq;
 
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
 
    public override bool Equals(object obj)
    {
        if (obj is Person other)
        {
            return this.Name == other.Name && this.Age == other.Age;
        }
        return false;
    }
 
    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}
 
class Program
{
    static void Main()
    {
        List<Person> list1 = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 }
        };
        List<Person> list2 = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 }
        };
 
        bool isSame = list1.SequenceEqual(list2);
        Console.WriteLine($"順序和內(nèi)容都相等: {isSame}");
    }
}

2. 忽略順序

忽略順序:先對兩個列表排序,然后使用 SequenceEqual

using System;
using System.Collections.Generic;
using System.Linq;
 
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
 
    public override bool Equals(object obj)
    {
        if (obj is Person other)
        {
            return this.Name == other.Name && this.Age == other.Age;
        }
        return false;
    }
 
    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}
 
class Program
{
    static void Main()
    {
        List<Person> list1 = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 }
        };
        List<Person> list2 = new List<Person>
        {
            new Person { Name = "Bob", Age = 30 },
            new Person { Name = "Alice", Age = 25 }
        };
 
        bool isSame = list1.OrderBy(p => p.Name).ThenBy(p => p.Age).SequenceEqual(
            list2.OrderBy(p => p.Name).ThenBy(p => p.Age)
        );
        Console.WriteLine($"忽略順序: {isSame}");
    }
}

3. 忽略重復(fù)元素

忽略重復(fù)元素:將列表轉(zhuǎn)換為 HashSet<T>,然后使用 SetEquals 方法進行比較。 

如果你希望忽略重復(fù)元素并只關(guān)心唯一元素是否相同,可以使用 HashSet<T> 來進行比較。HashSet<T> 會自動去除重復(fù)元素,因此可以通過將列表轉(zhuǎn)換為 HashSet<T> 來忽略重復(fù)元素。

using System;
using System.Collections.Generic;
 
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
 
    public override bool Equals(object obj)
    {
        if (obj is Person other)
        {
            return this.Name == other.Name && this.Age == other.Age;
        }
        return false;
    }
 
    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}
 
class Program
{
    static void Main()
    {
        List<Person> list1 = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 }
        };
        List<Person> list2 = new List<Person>
        {
            new Person { Name = "Bob", Age = 30 },
            new Person { Name = "Alice", Age = 25 }
        };
 
        bool isSame = new HashSet<Person>(list1).SetEquals(new HashSet<Person>(list2));
        Console.WriteLine($"忽略重復(fù)元素: {isSame}");
    }
}

總結(jié)

  • 順序和內(nèi)容都相等:使用 SequenceEqual。
  • 忽略順序:可以先對兩個列表排序后再使用 SequenceEqual
  • 忽略重復(fù)元素:可以使用 HashSet<T>。

以上就是C#比較兩個List集合內(nèi)容是否相同的幾種方法的詳細(xì)內(nèi)容,更多關(guān)于C#比較兩個List內(nèi)容是否相等的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#?List生成Txt文檔并且讀取Txt文檔封裝List

    C#?List生成Txt文檔并且讀取Txt文檔封裝List

    這篇文章主要介紹了C#?List生成Txt文檔并且讀取Txt文檔封裝List,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Unity3d 使用Gizmos畫一個圓圈

    Unity3d 使用Gizmos畫一個圓圈

    這篇文章主要介紹了Unity3d 使用Gizmos畫一個圓圈的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#設(shè)置MDI子窗體只能彈出一個的方法

    C#設(shè)置MDI子窗體只能彈出一個的方法

    這篇文章主要介紹了C#設(shè)置MDI子窗體只能彈出一個的方法,很實用的技巧,需要的朋友可以參考下
    2014-08-08
  • 使用C#調(diào)用百度地圖并實現(xiàn)坐標(biāo)點的設(shè)置以及讀取示例

    使用C#調(diào)用百度地圖并實現(xiàn)坐標(biāo)點的設(shè)置以及讀取示例

    這篇文章主要介紹了使用C#調(diào)用百度地圖并實現(xiàn)坐標(biāo)點的設(shè)置以及讀取示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C#加密app.config中連接字符串的方法

    C#加密app.config中連接字符串的方法

    這篇文章主要介紹了C#加密app.config中連接字符串的方法,涉及C#配置文件加密的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#實現(xiàn)簡單合并word文檔的方法

    C#實現(xiàn)簡單合并word文檔的方法

    這篇文章主要介紹了C#實現(xiàn)簡單合并word文檔的方法,涉及C#針對word文檔的讀取、插入、保存等技巧,非常具有實用價值,需要的朋友可以參考下
    2015-09-09
  • C#二維碼圖片識別代碼

    C#二維碼圖片識別代碼

    這篇文章主要為大家詳細(xì)介紹了C#二維碼圖片識別代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#簡單的向量用法實例教程

    C#簡單的向量用法實例教程

    這篇文章主要介紹了C#簡單的向量用法,需要的朋友可以參考下
    2014-07-07
  • C#中out與ref作用區(qū)別示例分析

    C#中out與ref作用區(qū)別示例分析

    這篇文章主要為大家介紹了C#中out與ref作用區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • C#?ArrayPool的實現(xiàn)示例

    C#?ArrayPool的實現(xiàn)示例

    ArrayPool是.NET中一個高性能數(shù)組池,用于減少內(nèi)存分配和垃圾回收的開銷,下面就來介紹一下ArrayPool的具體使用,感興趣的可以了解一下
    2025-07-07

最新評論

安乡县| 黄浦区| 普格县| 织金县| 淮安市| 保亭| 湖口县| 民乐县| 海阳市| 甘洛县| 唐海县| 台东市| 浮山县| 邢台市| 肥乡县| 外汇| 寻甸| 天水市| 深水埗区| 安义县| 湘乡市| 桓台县| 衡东县| 宿州市| 泗阳县| 高平市| 师宗县| 南雄市| 吴桥县| 三台县| 平乡县| 赫章县| 阿拉善右旗| 舟曲县| 衡东县| 明星| 兖州市| 宽甸| 雷州市| 平昌县| 漠河县|