Tôi nghĩ rằng tôi đã hiểu được Intersect
, nhưng hóa ra tôi đã sai.Tìm tất cả dữ liệu giao nhau, không chỉ các giá trị duy nhất
List<int> list1 = new List<int>() { 1, 2, 3, 2, 3};
List<int> list2 = new List<int>() { 2, 3, 4, 3, 4};
list1.Intersect(list2) => 2,3
//But what I want is:
// => 2,3,2,3,2,3,3
tôi có thể hình dung một cách như:
var intersected = list1.Intersect(list2);
var list3 = new List<int>();
list3.AddRange(list1.Where(I => intersected.Contains(I)));
list3.AddRange(list2.Where(I => intersected.Contains(I)));
Có cách nào dễ dàng hơn trong LINQ để đạt được điều này?
Tôi cần nêu rõ rằng tôi không quan tâm đến thứ tự các kết quả được đưa ra.
2,2,2,3,3,3,3 cũng sẽ hoàn toàn OK.
Vấn đề là tôi đang sử dụng bộ sưu tập này trên một bộ sưu tập rất lớn, vì vậy tôi cần hiệu quả.
Chúng tôi đang nói về Đối tượng chứ không phải int. Ints chỉ là một ví dụ đơn giản, nhưng tôi nhận ra điều này có thể tạo nên sự khác biệt.
Với bản cập nhật của bạn, thậm chí có thể có nhiều cách hiệu quả hơn để giải quyết vấn đề của bạn. Hãy cho chúng tôi biết thêm về dữ liệu. Cụ thể, tôi quan tâm đến câu hỏi liệu bộ sưu tập rất lớn của bạn có phần lớn các yếu tố độc đáo hay chủ yếu là sao chép hay không. Tôi cũng quan tâm để biết liệu các phần tử này có thực sự là số nguyên hay không, hoặc nếu đây là một phần tử quan trọng đối với một số loại phức tạp hơn; cụ thể, có tổng số * đặt hàng * được xác định trên dữ liệu của bạn không? Tức là, được đưa ra một tập hợp dữ liệu này, có một thứ tự từ nhỏ đến lớn nhất được xác định rõ ràng không? –