我有一个嵌套列表,其中包含一组列表,其中一些列表是重复的,我只想制作一个没有重复列表的第二个列表。我试过这个:
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。
答案 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)))
SequenceEqual
是IEnumerable<T>
上的扩展方法。我想你需要一个导入System.Linq
命名空间的using语句。
如果你不想测试子列表不是序列相等,但是set-equal(即顺序不重要),那么考虑使用ISet<T>
的实现,如HashSet<int>
而不是List<int>
。