-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>>これらのリストには が含まれてList<int>おり、もちろん も含まれていますint

于 2012-07-28T21:26:46.717 に答える
0

リストを絶対に使用したくない場合は、リストがフードの下で行うことをいつでも複製できます。少数の要素で配列を作成し、最大数に達したら、元のサイズの 2 倍の新しい配列を作成し、コピーします。既存の配列をそこに入れ、オリジナルを処分します。完了するまでこのパターンを続けます。代わりにリストを使用することをお勧めしますが、これは、何らかの理由でリストを使用したくない場合に回避する方法です。

于 2012-07-28T21:31:19.273 に答える
-2

実際、2 番目以降の次元を定義しなくても、ジャグ配列を作成できます。

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

しかし、大規模なデータセットでは、ストリーミング データを使用する方が効果的です。つまり、IEnumerable<T>.

于 2012-07-28T21:30:35.077 に答える