Mam listę list, dla których chcę znaleźć skrzyżowanie w ten sposób:
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 };
Czy istnieje sposób, aby to zrobić za pomocą IEnumerable.Intersect ()?
EDYCJA: Powinienem był być bardziej jasny: naprawdę mam listę list, nie wiem, ile będzie, trzy powyższe listy to tylko przykład, to, co mam, to tak naprawdę IEnumerable<IEnumerable<SomeClass>>
ROZWIĄZANIE
Dzięki za wszystkie świetne odpowiedzi. Okazało się, że istnieją cztery opcje rozwiązania tego problemu: Lista + agregacja (@Marcel Gosselin), Lista + foreach (@JaredPar, @Gabe Moothart), HashSet + agregat (@jesperll) i HashSet + foreach (@Tony the Pony). Przeprowadziłem testy wydajnościowe na tych rozwiązaniach (różna liczba list , liczba elementów na każdej liście i maksymalny rozmiar liczby losowej .
Okazuje się, że w większości sytuacji HashSet działa lepiej niż List (z wyjątkiem dużych list i małego rozmiaru liczb losowych, ze względu na naturę HashSet). Nie mogłem znaleźć żadnej rzeczywistej różnicy między metodą foreach a agregatem metoda (każda metoda działa nieco lepiej).
Dla mnie metoda agregacji jest naprawdę atrakcyjna (i wybieram to jako akceptowaną odpowiedź), ale nie powiedziałbym, że jest to najbardziej czytelne rozwiązanie. Jeszcze raz dziękuję wszystkim!