从嵌套列表C#中删除元素

时间:2015-05-30 10:00:30

标签: c# list

我正在尝试使用列表列表。 如何从列表中删除特定元素? 我有以下代码:

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);
        }
    }
}

4 个答案:

答案 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