У мене є список списків, для яких я хочу знайти перетин:
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 };
Чи є спосіб зробити це за допомогою IEnumerable.Intersect ()?
РЕДАГУВАТИ: Я повинен був би бути більш чітким у цьому: у мене справді є список списків, я не знаю, скільки їх буде, три списки вище були лише прикладом, те, що я маю, насправді є IEnumerable<IEnumerable<SomeClass>>
РІШЕННЯ
Дякуємо за всі чудові відповіді. Виявилося, що для вирішення цього існувало чотири варіанти: List + агрегат (@Marcel Gosselin), List + foreach (@JaredPar, @Gabe Moothart), HashSet + агрегат (@jesperll) і HashSet + foreach (@Tony the Pony). Я провів тестування продуктивності цих рішень (різна кількість списків , кількість елементів у кожному списку та максимальний розмір випадкової кількості .
Виявляється, для більшості ситуацій HashSet працює краще, ніж List (за винятком великих списків та малого розміру випадкових чисел, я думаю, через природу HashSet.) Я не міг знайти реальної різниці між методом foreach та сукупністю метод (метод foreach працює трохи краще.)
Для мене агрегований метод справді привабливий (і я погоджуюся з цим як прийняту відповідь), але я б не сказав, що це найбільш читабельне рішення .. Ще раз дякую!