2011-01-14 60 views
3

第2次元を動的にサイズの大きいものとして初期化できますか?C#の2次元配列

+0

であるC#で2次元配列を作成したい場合は?可変長ベクトルの配列のように? – n8wrl

+0

この質問の可能な重複:http://stackoverflow.com/questions/50558/how-do-you-initialize-a-2-dimensional-array-when-you-do-not-know-the-size –

+0

@ djacobson:dupeに投票すると、自動的にコメントが投稿されます。 – BoltClock

答えて

6

いいえ(C#配列の次元は固定されているため)、List<T>の配列を作成することができます。

+0

ありがとうございます。私はとにかくギザギザのアレイについて質問するつもりだったと思う。では、ArrayList()またはList <>を含むギザギザの配列を、ギザギザの配列の2番目の要素として初期化するにはどうすればよいですか?何か助けてくれてありがとう。お気軽に回答エリアをご利用ください: – user225626

4

ギザギザの配列を意味しますか?このように:

class Program 
{ 
    public int[][] jaggedArray = { 
           new int[]{ 1 } , 
           new int[]{} , 
           new int[]{ 1 , 2 , 3 } , 
           } ; 
} 
+0

ニコラスが返信してくれてありがとうございます。私は以下で答えます。 – user225626

1

通常、ギザギザの配列にはサイズがあります。

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

任意の配列にアクセスするのと同じ方法で値にアクセスできます。利点は、作成時にサイズを指定する必要がないことです。

編集:「外側」の配列が固定されている場合は、あなたが使用できます。

List<int>[] list = new List<int>[100](); 

編集:あなたの例に見て、私はこのようなものは、トリックを行う可能性が言うと思います:

List<int>[] sVertRange = new List<int>[924]; 

int nH = 0; 
for (int h = 315; h < 1240; h++) 
{ 
    for (int v = 211; v <= 660; v++) 
    { 
      Color c = bmp.GetPixel(h, v); 
      if (c.R > 220 && c.G < 153) 
     { 
      if(sVertRange[nH] == null) 
      { 
       sVertRange[nH] = new List<int>(); 
      } 

        sVertRange[nH].Add(v); 
      } 
      nH++; 
     } 
} 
+0

返信用のキーありがとうございます。私は以下で答えます。 – user225626

+0

あなたの擬似コードを見れば、リストのようなものが必要だろうと思います。 [] =新しいリスト [924](); –

+0

ありがとうございます。私は、他のものから始めると、簡単に書くことができたので、私はノブであり、何かを作曲してコンパイルし、それをテストします(数分または数時間以内に起こる可能性があります)。それがうまくいかなければ、私はこの速さに戻ってくるでしょう。返事とあなたの助けをお寄せいただきありがとうございます。編集:キース、あなたが周りにいるかもしれないので、私はちょうど他の設定で書いたものを投稿します。 (それはまだテストしていない)、あなたが望むなら、あなたが同じ構文で書かれている方法について私のスナップを編集できるかどうか聞いてください。ありがとう。 – user225626

0

更新:これをテストしただけで動作しません。すぐにクラッシュします。では、Keesの構文にはどのように書かれていますか?

int[][] sVertRange = {new int[924] ,new int[]{}}; 
    int nH = 0; 
    int nV = 0; 
    for (int h = 315; h < 1240; h++) { 
     for (int v = 211; v <= 660; v++) { 
      Color c = bmp.GetPixel(h, v); 
      if (c.R > 220 && c.G < 153) { 
       sVertRange[nH][nV++] = v; 
      } 
     nH++; 
     } 
    } 
+0

うん...あなたは何を達成しようとしていますか?機能的には...ビットマップなどを切り取っていますか? –

+0

try sVertRange [nH] .Add(v);それはうまくいくかもしれません:-) –

+0

あなたは燭台のチャートがどのようなものか知っていますか?このようなスナップの動きによって残されたアウトラインと同じ外観を想像してみてください。 (アンチエイリアス処理を含めて折れ線グラフ上の線のパスをスクラップするためにコードを使用していることを除いて) – user225626

0

あなたはあなたが最初の次元のインスタンスごとに異なる意味の各要素の型は、ビットマップ

int num1 = 10,num2 = 20; 
Bitmap[][] matrix= new Bitmap[num1][]; 
for (int i = 0; i < num1; i++) 
    matrix[i] = new Bitmap[num2];