从嵌套列表中删除重复列表c#

时间:2016-07-01 02:23:11

标签: c# nested-lists

我有一个嵌套列表,其中包含一组列表,其中一些列表是重复的,我只想制作一个没有重复列表的第二个列表。我试过这个:

        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);
             }
        }

它似乎很容易,但它不起作用,任何帮助将不胜感激。 THX。

2 个答案:

答案 0 :(得分:0)

使用std,您可以实现此目标。

您可以获取扩展方法的帮助,并查找两个列表中的Linq。如果订单不重要,请使用SequentialEqual扩展名(例如...... Except)。

s.Except(x).Any()

选中此Demo

答案 1 :(得分:0)

您正在检查引用相等性。而不是使用Contains尝试此替换

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

SequenceEqualIEnumerable<T>上的扩展方法。我想你需要一个导入System.Linq命名空间的using语句。

如果你不想测试子列表不是序列相等,但是set-equal(即顺序不重要),那么考虑使用ISet<T>的实现,如HashSet<int>而不是List<int>