从嵌套列表中移除元素
本文关键字:元素 嵌套 列表 | 更新日期: 2023-09-27 17:51:15
我正试图与列表的列表工作。如何从列表中删除特定的元素?我有以下代码:
using System;
using System.Collections.Generic;
namespace TEST3
{
class MainClass
{
public static void Main (string[] args)
{
List<List<int>> ar = new List<List<int>> ();
List<int> innerAr = new List<int> ();
for (int i = 1; i <= 9; i++)
{
innerAr.Add (i);
}
for (int j = 0; j <= 80; j++)
{
ar.Add (innerAr);
}
ar[80].RemoveAt(7);
ar[80].RemoveAt(2);
Console.WriteLine (ar[80].Count);
Console.WriteLine (ar[79].Count);
}
}
}
for (int j = 0; j <= 80; j++)
{
ar.Add (innerAr);
}
ar
中的所有元素现在都包含对innerAr
的相同引用。只有一个列表,你一直添加到ar
,所以当你后来通过访问ar[80]
来改变innerAr
时,那么你也改变了所有其他元素的innerAr
(因为它是同一个列表)。
如果你想要独立的列表,你需要为每个ar
项目创建一个:
List<List<int>> ar = new List<List<int>>();
for (int j = 0; j <= 80; j++)
{
List<int> innerAr = new List<int>();
for (int i = 1; i <= 9; i++)
{
innerAr.Add(i);
}
ar.Add(innerAr);
}
删除成功。正如Charles所暗示的那样,您唯一的错误是Object innerAt与List的80个列表中的每个列表中的对象完全相同。由于List是对象引用而不是值,因此在ar[79]和ar[80]
列表具有相同的 Count
,因为是多次添加的相同列表
如果你只希望一个列表因RemoveAt
而改变,你必须创建一个新的。创建具有相同元素的新列表的简单方法是添加ToList()
。
public static void Main(string[] args)
{
List<List<int>> ar = new List<List<int>>();
List<int> innerAr = new List<int>();
for (int i = 1; i <= 9; i++)
{
innerAr.Add(i);
}
for (int j = 0; j <= 80; j++)
{
ar.Add(innerAr.ToList()); // <- here is the change
}
ar[80].RemoveAt(7);
ar[80].RemoveAt(2);
Console.WriteLine(ar[80].Count); // 7
Console.WriteLine(ar[79].Count); // 9
}
你有父列表
List<List<int>> parent=new List<List<int>>();
和你的孩子列表
List<int> child=new List<int>(){1,2,3};
添加到父
parent.Add(child);
子元素1、2、3
删除
parent[0].removeAt(0)
子元素2,3