Tôi có một danh sách các danh sách mà tôi muốn tìm giao điểm như sau:
var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };
// expected intersection is List<int>() { 3 };
Có cách nào để làm điều này với IEnumerable.Intersect () không?
CHỈNH SỬA: Lẽ ra tôi phải nói rõ hơn về điều này: Tôi thực sự có một danh sách các danh sách, tôi không biết sẽ có bao nhiêu danh sách, ba danh sách trên chỉ là một ví dụ, những gì tôi có thực sự là một IEnumerable<IEnumerable<SomeClass>>
GIẢI PHÁP
Cảm ơn cho tất cả các câu trả lời tuyệt vời. Hóa ra có bốn tùy chọn để giải quyết vấn đề này: Danh sách + tổng hợp (@Marcel Gosselin), Danh sách + foreach (@JaredPar, @Gabe Moothart), HashSet + tổng hợp (@jesperll) và HashSet + foreach (@Tony the Pony). Tôi đã thực hiện một số thử nghiệm hiệu suất trên các giải pháp này ( số lượng danh sách khác nhau , số phần tử trong mỗi danh sách và kích thước tối đa của số ngẫu nhiên .
Nó chỉ ra rằng trong hầu hết các tình huống, HashSet hoạt động tốt hơn Danh sách (ngoại trừ với danh sách lớn và kích thước số ngẫu nhiên nhỏ, do bản chất của HashSet, tôi đoán vậy.) Tôi không thể tìm thấy bất kỳ sự khác biệt thực sự nào giữa phương pháp foreach và tổng hợp (phương pháp foreach hoạt động tốt hơn một chút .)
Đối với tôi, phương pháp tổng hợp thực sự hấp dẫn (và tôi sẽ coi đó là câu trả lời được chấp nhận) nhưng tôi sẽ không nói đó là giải pháp dễ đọc nhất .. Một lần nữa, cảm ơn tất cả!