欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#集合根據(jù)對象的某個屬性進(jìn)行去重的代碼示例

 更新時間:2024年03月18日 10:33:35   作者:周杰倫fans  
當(dāng)根據(jù)對象的Name屬性進(jìn)行去重時,你可以使用以下三種方法:使用Distinct方法和自定義比較器、使用LINQ的GroupBy方法,以及使用HashSet,下面給大家介紹C#集合根據(jù)對象的某個屬性進(jìn)行去重的代碼示例,感興趣的朋友一起看看吧

當(dāng)根據(jù)對象的Name屬性進(jìn)行去重時,你可以使用以下三種方法:使用Distinct方法和自定義比較器、使用LINQ的GroupBy方法,以及使用HashSet。下面是每種方法的詳細(xì)代碼示例和解釋:

1.使用Distinct方法和自定義比較器:

using System;
using System.Collections.Generic;
using System.Linq;
// 自定義對象類
public class Person
{
    public string Name { get; set; }
}
// 自定義比較器類
public class NameEqualityComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.Name == y.Name;
    }
    public int GetHashCode(Person obj)
    {
        return obj.Name.GetHashCode();
    }
}
public class Program
{
    public static void Main()
    {
        // 創(chuàng)建包含重復(fù)對象的集合
        List<Person> people = new List<Person>()
        {
            new Person { Name = "John" },
            new Person { Name = "Jane" },
            new Person { Name = "John" },
            new Person { Name = "Alice" },
            new Person { Name = "Jane" }
        };
        // 使用Distinct方法和自定義比較器進(jìn)行去重
        List<Person> distinctPeople = people.Distinct(new NameEqualityComparer()).ToList();
        // 輸出去重后的結(jié)果
        foreach (Person person in distinctPeople)
        {
            Console.WriteLine(person.Name);
        }
    }
}

解釋:

  • 在上述代碼中,我們首先定義了一個Person類,具有Name屬性作為去重的依據(jù)。
  • 然后,我們創(chuàng)建了一個包含重復(fù)對象的List<Person>集合。
  • 接下來,我們定義了一個名為NameEqualityComparer的自定義比較器類,實(shí)現(xiàn)了IEqualityComparer<Person>接口。
  • 在自定義比較器類中,我們重寫了Equals方法和GetHashCode方法,分別根據(jù)Person對象的Name屬性進(jìn)行比較和哈希計(jì)算。
  • 在主程序中,我們使用Distinct方法,并將自定義比較器作為參數(shù)傳遞給該方法,以實(shí)現(xiàn)根據(jù)Name屬性進(jìn)行去重的功能。
  • 最后,我們將去重后的結(jié)果轉(zhuǎn)換為List<Person>類型,并逐個輸出去重后的Person對象的Name屬性。

2.使用LINQ的GroupBy方法:

using System;
using System.Collections.Generic;
using System.Linq;
// 自定義對象類
public class Person
{
    public string Name { get; set; }
}
public class Program
{
    public static void Main()
    {
        // 創(chuàng)建包含重復(fù)對象的集合
        List<Person> people = new List<Person>()
        {
            new Person { Name = "John" },
            new Person { Name = "Jane" },
            new Person { Name = "John" },
            new Person { Name = "Alice" },
            new Person { Name = "Jane" }
        };
        // 使用GroupBy方法根據(jù)Name屬性進(jìn)行分組,并選擇每個分組的第一個對象
        List<Person> distinctPeople = people.GroupBy(p => p.Name).Select(g => g.First()).ToList();
        // 輸出去重后的結(jié)果
        foreach (Person person in distinctPeople)
        {
            Console.WriteLine(person.Name);
        }
    }
}

解釋:

  • 在上述代碼中,我們定義了一個Person類,具有Name屬性作為去重的依據(jù)。
  • 然后,我們創(chuàng)建了一個包含重復(fù)對象的List<Person>集合。
  • 接下來,我們使用GroupBy方法根據(jù)Name屬性進(jìn)行分組。這將返回一個IEnumerable<IGrouping<string, Person>>,其中每個分組具有一個鍵(Name屬性的值)和相應(yīng)的對象集合。
  • 然后,我們使用Select方法選擇每個分組的第一個對象,以實(shí)現(xiàn)去重的效果。
  • 最后,我們將去重后的結(jié)果轉(zhuǎn)換為List<Person>類型,并逐個輸出去重后的Person對象的Name屬性。

3.使用HashSet:

using System;
using System.Collections.Generic;
// 自定義對象類
public class Person
{
    public string Name { get; set; }
}
public class Program
{
    public static void Main()
    {
        // 創(chuàng)建包含重在C#中,你可以使用以下幾種方法根據(jù)對象的Name屬性對集合進(jìn)行去重:
1. 使用Distinct方法和自定義比較器:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Person
{
    public string Name { get; set; }
}
public class NameEqualityComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.Name == y.Name;
    }
    public int GetHashCode(Person obj)
    {
        return obj.Name.GetHashCode();
    }
}
public class Program
{
    public static void Main()
    {
        List<Person> people = new List<Person>()
        {
            new Person { Name = "John" },
            new Person { Name = "Jane" },
            new Person { Name = "John" },
            new Person { Name = "Alice" },
            new Person { Name = "Jane" }
        };
        List<Person> distinctPeople = people.Distinct(new NameEqualityComparer()).ToList();
        foreach (Person person in distinctPeople)
        {
            Console.WriteLine(person.Name);
        }
    }
}

在上面的代碼中,我們定義了一個Person類,其中包含一個Name屬性用于去重。然后,我們創(chuàng)建了一個包含重復(fù)對象的List集合。接下來,我們定義了一個NameEqualityComparer類,實(shí)現(xiàn)了IEqualityComparer接口,其中Equals方法用于比較Name屬性是否相等,GetHashCode方法用于獲取Name屬性的哈希碼。在主程序中,我們使用Distinct方法,并將自定義的比較器作為參數(shù)傳遞給Distinct方法,以實(shí)現(xiàn)根據(jù)Name屬性進(jìn)行去重的功能。最后,我們將去重后的結(jié)果轉(zhuǎn)換為List類型,并遍歷輸出每個人物的Name屬性。

4.使用LINQ的GroupBy方法:

using System;
using System.Collections.Generic;
using System.Linq;
public class Person
{
    public string Name { get; set; }
}
public class Program
{
    public static void Main()
    {
        List<Person> people = new List<Person>()
        {
            new Person { Name = "John" },
            new Person { Name = "Jane" },
            new Person { Name = "John" },
            new Person { Name = "Alice" },
            new Person { Name = "Jane" }
        };
        List<Person> distinctPeople = people.GroupBy(p => p.Name).Select(g => g.First()).ToList();
        foreach (Person person in distinctPeople)
        {
            Console.WriteLine(person.Name);
        }
    }
}

在上面的代碼中,我們同樣定義了一個Person類,并創(chuàng)建了一個包含重復(fù)對象的List集合。然后,我們使用GroupBy方法根據(jù)Name屬性進(jìn)行分組,將相同Name屬性的對象放入同一個組中。接著,我們使用Select方法選擇每個組中的第一個對象,以實(shí)現(xiàn)去重的效果。最后,我們將去重后的結(jié)果轉(zhuǎn)換為List類型,并遍歷輸出每個人物的Name屬性。

5.使用HashSet:

using System;
using System.Collections.Generic;
public class Person
{
    public string Name { get; set; }
}
public class Program
{
    public static void Main()
    {
        List<Person> people = new List<Person>()
        {
            new Person { Name = "John" },
            new Person { Name = "Jane" },
            new Person { Name = "John" },
            new Person { Name = "Alice" },
            new Person { Name = "Jane" }
        };
        HashSet<Person> distinctPeople = new HashSet<Person>(people, new NameEqualityComparer());
        foreach (Person person in distinctPeople)
        {
            Console.WriteLine(person.Name);
        }
    }
}

在上面的代碼中,我們同樣定義了一個Person類,并創(chuàng)建了一個包含重復(fù)對象的List集合。然后,我們使用HashSet類,并將List集合和自定義的比較器傳遞給HashSet的構(gòu)造函數(shù),以實(shí)現(xiàn)根據(jù)Name屬性進(jìn)行去重的功能。最后,我們遍歷輸出去重后的結(jié)果。

到此這篇關(guān)于C#集合根據(jù)對象的某個屬性進(jìn)行去重的文章就介紹到這了,更多相關(guān)C#根據(jù)對象的某個屬性去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#并發(fā)編程入門教程之概述

    C#并發(fā)編程入門教程之概述

    這篇文章主要給大家介紹了關(guān)于C#并發(fā)編程之概述的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C#?wpf?通過HwndHost渲染視頻的實(shí)現(xiàn)方法

    C#?wpf?通過HwndHost渲染視頻的實(shí)現(xiàn)方法

    日常開發(fā)中,特別是音視頻開發(fā),需要在界面上渲染視頻,比如制作一個播放器、或者視頻編輯工具、以及視頻會議客戶端。通常拿到的是像素格式數(shù)據(jù),此時需要渲染到wpf窗口上就需要一定的方法,本文介紹一種通過hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里
    2021-11-11
  • C# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例

    C# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例

    下面小編就為大家?guī)硪黄狢# 計(jì)算標(biāo)準(zhǔn)偏差相當(dāng)于Excel中的STDEV函數(shù)實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • c#入門之分支語句使用方法(三元運(yùn)算符、if語句、switch語句)

    c#入門之分支語句使用方法(三元運(yùn)算符、if語句、switch語句)

    這篇文章主要介紹了c#入門之分支語句使用方法,包括三元運(yùn)算符、if語句、switch語句,需要的朋友可以參考下
    2014-04-04
  • C#正則表達(dá)式(Regex類)用法實(shí)例總結(jié)

    C#正則表達(dá)式(Regex類)用法實(shí)例總結(jié)

    正則表達(dá)式的主要作用是驗(yàn)證字符串的值是否滿足一定的規(guī)則,在頁面輸入數(shù)據(jù)驗(yàn)證方面的應(yīng)用比較多,下面這篇文章主要給大家介紹了關(guān)于C#正則表達(dá)式(Regex類)用法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • C#如何修改項(xiàng)目名圖文詳解

    C#如何修改項(xiàng)目名圖文詳解

    最近開發(fā)工作接近尾聲,客戶來要求更換項(xiàng)目的名稱,差不多要變更整個解決方案中項(xiàng)目名稱,引用等等,這個工作量還是很大的,這篇文章主要給大家介紹了關(guān)于C#如何修改項(xiàng)目名的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法

    DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法

    這篇文章介紹了DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • 實(shí)例代碼講解c# 線程(下)

    實(shí)例代碼講解c# 線程(下)

    這篇文章主要介紹了c# 線程的的相關(guān)資料,文中示例代碼非常細(xì)致,對大家的學(xué)習(xí)有很大幫助,感興趣的朋友可以了解下
    2020-06-06
  • C# 抓圖服務(wù)的實(shí)現(xiàn)

    C# 抓圖服務(wù)的實(shí)現(xiàn)

    這篇文章主要介紹了C# 抓圖服務(wù)的實(shí)現(xiàn),幫助大家更好的利用c#處理窗口,進(jìn)行截圖,感興趣的朋友可以了解下
    2021-01-01
  • WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器

    WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論