-1

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

我目前正在做:

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

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

4

4 回答 4

4

是的,你应该使用List<T>.

在这种情况下,您将使用List<List<List<int>>>.

你的数组:

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

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

于 2012-07-28T21:25:46.250 回答
0

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

使用与此类似的变量:

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

这个变量允许你添加List<List<int>>'s 到它,那些列表包含List<int>'s,当然也包含int's

于 2012-07-28T21:26:46.717 回答
0

如果你绝对不想使用列表,你总是可以复制列表在幕后所做的:用少量元素创建你的数组,当你达到最大值时,创建一个是原始大小两倍的新数组,复制您现有的数组放入其中,并处理您的原始数组。继续这个模式,直到你完成。我建议改用 Lists,但如果出于某种原因您不想使用 Lists,那么您可以通过这种方式解决它。

于 2012-07-28T21:31:19.273 回答
-2

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

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

但在大型数据集上,使用流数据更有效——即IEnumerable<T>.

于 2012-07-28T21:30:35.077 回答