C#中的多维整数列表

5
首先,我通过问题搜索并没有找到我需要的内容,也许这个东西不存在哈哈但我会试一试。我是C#的新手,来自于C++,有高中的经验。
在C++中,我有Vector<int> T[];,所以我可以创建一个大小未知的列表,并做出这样的事情,而不浪费空间;更确切地说:
T[0][....];
T[1][...];

1 2 3 4 5
1 2 3 
2 4 1 5
0 0 0 0 0 0

我正在尝试用C#完成这个任务,但似乎不起作用;到目前为止,我已经尝试了以下方法:
 public class myints
    {
        public int x { get; set; }
    }

  public List<myints[]> T = new List<myints[]>();

  T[i].Add(new myints() { x = i });

我希望能够添加一些东西,然后在for循环中使用Count()来查看T[i]中有多少个元素,就像T[i].size()一样...这种情况可能吗?

程序提示System.Array没有Add的定义。


2
数组是固定大小的,就像在C++中一样。使用List<List<T>> - Lucas Trzesniewski
List<T>正如Lucas Trzesniewski所建议的那样,是您正在寻找的。但是您关于不浪费空间的评论是不正确的。List<T>就像一个可调整大小的数组。当在满List<T>上调用.Add时,框架会将分配的大小加倍,并且我相信永远不会缩小它(我必须检查.NET源代码才能确定)。然而,当它不再被引用时,它当然会被垃圾回收。 - Clay Ver Valen
这里有一个很好的解释:https://dev59.com/CXRB5IYBdhLWcg3wUFrB - dashnick
@ClayVerValen 它从不自动缩小它本身,因为这样做是浪费的,但是如果你确实知道在特定情况下这是一个好主意,你可以自己设置Capacity属性。 - Lucas Trzesniewski
@rakuens 使用调试器 :) i 超出了 T 的范围,就像错误所说的那样。 - Lucas Trzesniewski
显示剩余2条评论
1个回答

5
这个例子创建了一个带有多个不同长度的子列表的列表,可以作为你想要做的事情的良好起点。
List<List<int>> mainlist = new List<List<int>>();
List<int> counter = new List<int>() { 5, 4, 7, 2 };
int j = 0;

// Fill sublists
foreach(int c in counter)
{
    mainlist.Add(new List<int>(c));
    for(int i = 0; i < c; i++ )
        mainlist[j].Add(i);
    j++;
 }

你可以将初始化列表添加到主列表中。
List<List<int>> mainlist = new List<List<int>>();
mainlist.Add(new List<int>() { 1, 5, 7 });
mainlist.Add(new List<int>() { 0, 2, 4, 6, 8 });
mainlist.Add(new List<int>() { 0, 0, 0 });

我可以在不知道长度的情况下做到这一点吗?我正在读取节点并将它们慢慢添加到列表中,尽管这个示例让我更好地理解了。为什么我要向列表中添加第三个列表?如果已经声明了两个列表。 - rakuens
是的,这些列表会随着添加内容而动态增长,欢迎来到 C# 美好的世界。 - pm100
你不必添加第三个列表,这只是一个例子。你可以添加任意多个列表。 - Yurrit Avonds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接