如何Jagged List C#

时间:2012-07-28 21:22:05

标签: c#

我正在尝试创建一个锯齿状数组,但由于我正在使用的数据的动态性,我不想浪费资源来创建一个大的锯齿状数组。

我目前正在做:

int[][][] data = new data[Int16.MaxValue][][];

我没有数据集有多大,或者有没有比通过列表更好的方式?

4 个答案:

答案 0 :(得分:4)

是的,您应该使用List<T>

在这种情况下,您可以使用List<List<List<int>>>

你的阵列:

int[][][] data = new data[Int16.MaxValue][Int16.MaxValue][Int16.MaxValue];

将占用(2 ^ 16)^ 3 = 2 ^ 48 =您拥有更多的存储空间, 更不用说该声明无效C#。

答案 1 :(得分:0)

如果您在初始化时不知道需要多少空间,那么最好使用动态调整大小的列表。

使用与此类似的变量:

List<List<List<int>>> data = new List<List<List<int>>>();

此变量允许您向其添加List<List<int>>,这些列表包含List<int>,其中包含int

答案 2 :(得分:0)

如果你绝对不想使用Lists,你可以随时复制Lists所做的内容:用少量元素创建你的数组,当你达到最大值时,创建一个比原始数据加倍的新数组大小,将现有阵列复制到其中,并处理原始阵列。继续这种模式直到完成。我推荐使用列表,但如果出于某种原因,您只是不想使用列表,那就是如何解决这个问题。

答案 3 :(得分:-2)

实际上,您可以创建锯齿状数组而无需定义第二维和更多维。

int[][][] jagged = new int[256][][];

但在大型数据集中,使用流数据更有效 - 即IEnumerable<T>的组合。