Sử dụng GroupBy()
và Count() > 1
Tôi đang cố gắng tìm các bản sao trùng lặp của lớp trong danh sách.GroupBy trên đối tượng phức tạp (ví dụ: Danh sách <T>)
Lớp trông như thế này:
public class SampleObject
{
public string Id;
public IEnumerable<string> Events;
}
Và đây là cách tôi nhanh chóng và nhóm danh sách:
public class Program
{
private static void Main(string[] args)
{
var items = new List<SampleObject>()
{
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } },
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } }
};
var duplicates = items.GroupBy(x => new { Token = x.Id, x.Events })
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
}
}
Các duplicates
chứa có mặt hàng nào. Làm thế nào tôi có thể thực hiện công việc nhóm?
By Chức năng mặc định không được so sánh bằng giá trị các mặt hàng của họ. –
@SergeyBerezovskiy - Đó không phải là vấn đề ở đây. Vấn đề là thiếu 'GetHashCode' và' Equals' override. – Enigmativity
@Enigmativity 'mới {Token = x.Id, x.Events}' không có gì để ghi đè Equals và GetHashCode của 'SampleObject'. Vấn đề ở đây là hoàn toàn gây ra bởi sự so sánh 'x.Events' –