C#从"锯齿状的"中删除一个列表名单

时间:2018-06-16 13:34:56

标签: c# list

我试图从List<int>中移除List<List<int>>,我到处寻找并找不到解决方案。

这是我迄今为止所做的尝试:

List<List<int>> my2DList = ... ;  // this is where I assign my 2D list
my2DList.Remove(new List<int>( ... ));

my2DList的长度保持不变。我该怎么办?

2 个答案:

答案 0 :(得分:7)

问题是List<int>不会覆盖Equals / GetHashCode,因此您的新列表永远不会与现有列表相同。 (基本上,它将比较参考而不是内容。)

三个选项:

  • 找到要删除的确切列表,并将该引用传递给Remove
  • 找到要删除的列表的索引,并将其传递给RemoveAt
  • 创建谓词并使用RemoveAll

最后一个例子:

List<int> listToRemove = new List<int> { ... };
my2DList.RemoveAll(x => x.SequenceEqual(listToRemove));

答案 1 :(得分:3)

您需要删除要删除的确切对象,而不是新对象(这将是一个不同的对象)。例如:

my2DList.Remove(my2DList[3]);

如果您不知道索引或对象,则需要遍历List以找到正确的对象。