2014-02-20 3 views
0

저는 ListList<Foo>.입니다. 유사점과 차이점을 포함하는 두 개의 새로운 컬렉션 List<Foo>을 만들려고합니다. 나는 다수의 모음을 처리하고있는 동안 대부분의 단일 목록을 처리하고 있으며,이 사이트에 글을 많이 읽고, 아래에있는 내 솔루션 다음 diff 방법에 그러나교차 목록을 가지고 목록을 제거한 채로 제거합니다

List<List<Foo>> listOfLists = [Build up the list, not important] 

HashSet<Foo> same = listOfLists 
.Skip(1) 
.Aggregate(
new HashSet<Foo>(listOfLists.First()), 
(h, e) => 
{ 
h.IntersectWith(e); 
return h; 
} 
); 

HashSet<Foo> diff = listOfLists 
.Skip(1) 
.Aggregate(
new HashSet<Foo>(listOfLists.First()), 
(h, e) => 
{ 
h.ExceptWith(e); 
return h; 
} 
); 

, 단지를 반환하는 것 다른 Foo 컬렉션은 ListsofLists 컬렉션에있는 List<Foo>의 두 번째 컬렉션입니다.

HashSet<Foo> all = listOfLists 
    .Skip(1) 
    .Aggregate(
     new HashSet<Foo>(listOfLists.First()), 
     (h, e) => 
     { 
      h.UnionWith(e); 
      return h; 
     } 
    ); 

HashSet<Foo> diff = all.ExceptWith(same) 
+0

이 컨텍스트의 차이를 무엇이라고 부릅니까 : – Grzenio

+0

하나 이상의 목록에서 누락 된 요소 - 올바른 것. – user3010406

답변

1

나는 (이미 계산) 일반적인 사람을 먼저 모든 요소를 ​​계산하는 것입니다 귀하의 경우은 diff를 계산 한 후 제거하는 가장 쉬운 방법을 생각? 하나 이상의 목록에서 누락 된 요소? 또는 하나의 목록에만 있고 다른 목록에는없는 요소가 있습니까?
+0

은 void 메쏘드를 제외하고 있지 않습니까? – user3010406

+0

@ user3010406 ​​일 수도 있습니다. 답변을 수정하십시오. – Grzenio

관련 문제