代码之家  ›  专栏  ›  技术社区  ›  kiyah

c从“锯齿状”列表中删除列表

  •  3
  • kiyah  · 技术社区  · 6 年前

    我正试图删除 List<int> 从A List<List<int>> ,我到处找都没找到解决办法。

    到目前为止,我一直在尝试:

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

    但是 my2DList 长度不变。我该怎么办?

    2 回复  |  直到 6 年前
        1
  •  7
  •   Jon Skeet    6 年前

    问题是 List<int> 不覆盖 Equals / GetHashCode ,因此新列表永远不等于现有列表。(基本上,它将比较引用而不是内容。)

    三种选择:

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

    最后一个例子:

    List<int> listToRemove = new List<int> { ... };
    my2DList.RemoveAll(x => x.SequenceEqual(listToRemove));
    
        2
  •  3
  •   PhilMasteG    6 年前

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

    my2DList.Remove(my2DList[3]);
    

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