2016-07-01 42 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命名空間。

如果你不想要測試孩子列表不是序列相同,但設置相等(即順序並不重要),然後考慮使用ISet<T>實現像HashSet<int>而不是List<int>

+0

感謝您的幫助:) – Exii