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#?wpf?通過HwndHost渲染視頻的實(shí)現(xiàn)方法
日常開發(fā)中,特別是音視頻開發(fā),需要在界面上渲染視頻,比如制作一個播放器、或者視頻編輯工具、以及視頻會議客戶端。通常拿到的是像素格式數(shù)據(jù),此時需要渲染到wpf窗口上就需要一定的方法,本文介紹一種通過hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里2021-11-11C# 計(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-01c#入門之分支語句使用方法(三元運(yùn)算符、if語句、switch語句)
這篇文章主要介紹了c#入門之分支語句使用方法,包括三元運(yùn)算符、if語句、switch語句,需要的朋友可以參考下2014-04-04C#正則表達(dá)式(Regex類)用法實(shí)例總結(jié)
正則表達(dá)式的主要作用是驗(yàn)證字符串的值是否滿足一定的規(guī)則,在頁面輸入數(shù)據(jù)驗(yàn)證方面的應(yīng)用比較多,下面這篇文章主要給大家介紹了關(guān)于C#正則表達(dá)式(Regex類)用法的相關(guān)資料,需要的朋友可以參考下2022-08-08DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法
這篇文章介紹了DataGridView凍結(jié)列或行、列順序調(diào)整、操作行頭列頭標(biāo)題的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11