我正在尝试使用列表列表。 如何从列表中删除特定元素? 我有以下代码:
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);
}
}
}
答案 0 :(得分:1)
for (int j = 0; j <= 80; j++)
{
ar.Add (innerAr);
}
ar
中的所有元素现在都包含与innerAr
相同的引用。您只有一个列表一直添加到ar
,因此当您稍后通过访问innerAr
更改ar[80]
时,您还会更改所有其他元素的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);
}
答案 1 :(得分:0)
这些列表的相同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
}
答案 2 :(得分:0)
您的删除成功。正如Charles暗示你唯一的错误是Object innerAt,就是80个List列表中每个列表中的完全相同的对象。 因为List是一个对象引用而不是一个值,所以你在ar [79]和ar [80]中有相同的引用
答案 3 :(得分:0)
您有父母列表
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