C#集合根據(jù)對象的某個屬性進行去重的代碼示例
當根據(jù)對象的Name屬性進行去重時,你可以使用以下三種方法:使用Distinct方法和自定義比較器、使用LINQ的GroupBy方法,以及使用HashSet。下面是每種方法的詳細代碼示例和解釋:
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)建包含重復對象的集合
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方法和自定義比較器進行去重
List<Person> distinctPeople = people.Distinct(new NameEqualityComparer()).ToList();
// 輸出去重后的結果
foreach (Person person in distinctPeople)
{
Console.WriteLine(person.Name);
}
}
}解釋:
- 在上述代碼中,我們首先定義了一個Person類,具有Name屬性作為去重的依據(jù)。
- 然后,我們創(chuàng)建了一個包含重復對象的List<Person>集合。
- 接下來,我們定義了一個名為NameEqualityComparer的自定義比較器類,實現(xiàn)了IEqualityComparer<Person>接口。
- 在自定義比較器類中,我們重寫了Equals方法和GetHashCode方法,分別根據(jù)Person對象的Name屬性進行比較和哈希計算。
- 在主程序中,我們使用Distinct方法,并將自定義比較器作為參數(shù)傳遞給該方法,以實現(xiàn)根據(jù)Name屬性進行去重的功能。
- 最后,我們將去重后的結果轉換為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)建包含重復對象的集合
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屬性進行分組,并選擇每個分組的第一個對象
List<Person> distinctPeople = people.GroupBy(p => p.Name).Select(g => g.First()).ToList();
// 輸出去重后的結果
foreach (Person person in distinctPeople)
{
Console.WriteLine(person.Name);
}
}
}解釋:
- 在上述代碼中,我們定義了一個Person類,具有Name屬性作為去重的依據(jù)。
- 然后,我們創(chuàng)建了一個包含重復對象的List<Person>集合。
- 接下來,我們使用GroupBy方法根據(jù)Name屬性進行分組。這將返回一個IEnumerable<IGrouping<string, Person>>,其中每個分組具有一個鍵(Name屬性的值)和相應的對象集合。
- 然后,我們使用Select方法選擇每個分組的第一個對象,以實現(xià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屬性對集合進行去重:
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)建了一個包含重復對象的List集合。接下來,我們定義了一個NameEqualityComparer類,實現(xiàn)了IEqualityComparer接口,其中Equals方法用于比較Name屬性是否相等,GetHashCode方法用于獲取Name屬性的哈希碼。在主程序中,我們使用Distinct方法,并將自定義的比較器作為參數(shù)傳遞給Distinct方法,以實現(xiàn)根據(jù)Name屬性進行去重的功能。最后,我們將去重后的結果轉換為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)建了一個包含重復對象的List集合。然后,我們使用GroupBy方法根據(jù)Name屬性進行分組,將相同Name屬性的對象放入同一個組中。接著,我們使用Select方法選擇每個組中的第一個對象,以實現(xià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)建了一個包含重復對象的List集合。然后,我們使用HashSet類,并將List集合和自定義的比較器傳遞給HashSet的構造函數(shù),以實現(xiàn)根據(jù)Name屬性進行去重的功能。最后,我們遍歷輸出去重后的結果。
到此這篇關于C#集合根據(jù)對象的某個屬性進行去重的文章就介紹到這了,更多相關C#根據(jù)對象的某個屬性去重內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
WinForm實現(xiàn)為TextBox設置水印文字功能
這篇文章主要介紹了WinForm實現(xiàn)為TextBox設置水印文字功能,很實用的一個技巧,需要的朋友可以參考下2014-08-08
C#獲取機器碼的方法詳解(機器名,CPU編號,硬盤編號,網(wǎng)卡mac等)
這篇文章主要介紹了C#獲取機器碼的方法,結合實例形式詳細分析了C#獲取硬件機器名、CPU編號、硬盤編號、網(wǎng)卡mac等信息的相關實現(xiàn)方法,需要的朋友可以參考下2016-07-07
C#的通用DbHelper類(支持數(shù)據(jù)連接池)示例詳解
這篇文章主要介紹了C#的通用DbHelper類支持數(shù)據(jù)連接池,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03

