从嵌套列表中移除元素

本文关键字:元素 嵌套 列表 | 更新日期: 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

相关文章: