2016-07-01 1 views
1

목록 집합이 포함 된 중첩 목록이 있습니다. 이러한 목록 중 일부는 중복되어 있고 중복 목록이없는 두 번째 목록 만 만들고 싶습니다. 쉽게 보이지만 그 작동하지 않는, 어떤 도움이 이해할 수있을 것이다중첩 된 목록에서 중복 목록 제거 C#

 List<List<string>> liste1 = new List<List<string>>(); 
     List<List<string>> liste2 = new List<List<string>>(); 
     List<string> l1 = new List<string> { "a", "b", "c" }; 
     List<string> l2 = new List<string> { "h", "x", "g" }; 
     List<string> l3 = new List<string> { "a", "b", "c" }; 
     List<string> l4 = new List<string> { "z", "t", "n" }; 
     liste1.Add(l1); 
     liste1.Add(l2); 
     liste1.Add(l3); 
     liste1.Add(l4); 
     foreach (List<string> lis in liste1) 
     { 
      if(!liste2.Contains(lis)) 
      { 
       liste2.Add(lis); 
      } 
     } 

: 나는이 시도. 고마워.

답변

0

Linq을 사용하면이를 달성 할 수 있습니다.

확장 방법의 도움을 받아 두 목록 중 SequentialEqual을 찾아 볼 수 있습니다. 순서가 중요하지 않은 경우 Except 확장명 (예 : s.Except(x).Any())을 사용하십시오.

var liste2= liste1.Where((x,i)=> !liste1.Skip(i+1).Any(s=>s.SequenceEqual(x))); 

확인 당신은 참조 어떤지를 확인하는이 Demo

+0

답장을 보내 주셔서 감사합니다. – Exii

+0

아무런 문제없이 도움이 되셨습니다. –

0

. 대신 Contains를 사용하는이 대체

//if (!liste2.Contains(lis)) 
if(!liste2.Any(subList => subList.SequenceEqual(lis))) 

SequenceEqualIEnumerable<T>에 확장 방법이 시도. System.Linq 네임 스페이스를 가져 오는 using 문이 필요하다고 생각합니다. 당신이 (즉, 순서는 중요하지 않습니다) 아이리스트 순서-동일하지 있는지 테스트하지만, 설정과 동일 싶지 않다 경우

HashSet<int> 대신 List<int> 같은 ISet<T>의 구현을 사용하는 것이 좋습니다.

+0

도움을 주셔서 감사합니다 :) – Exii