2016-12-25 23 views
1

私はいくつかのループ内で修正したりサイズを変更したりするタイプの2D配列を持っています。私の主な目標は、ループの繰り返しごとに変更される2次元配列を作成し、この配列内の適切なセルにcharを追加することによって最小限のメモリを使用することです。ここに私のコードです:2次元配列のサイズ変更と初期化C#

static void Main(string[] args) 
    { 
     int maxBound = 100;//length of freq array 
     Random rnd1 = new Random(); 
     int numLoops = rnd1.Next(1000, 1200);//number of total elements in freq array 
     int[] freq = new int[maxBound];//freq array 
     string[,] _2dim = new string[maxBound, numLoops];//rows,columns 
     Random rnd2 = new Random(); 

     for (int i = 0; i < numLoops; i++) 
     { 
      int s = rnd2.Next(maxBound); 
      freq[s]++; 
      //Here I try to add `*` to the _2dim array while resizing it to the appropriate size 

     } 
    } 

ソリューションの主なアプローチは何ですか?ありがとう

+1

1.配列のサイズを変更することはできません。2. 2つのforループを使用してすべての要素を繰り返し処理します。 –

+0

List of Listsのようなものを使用できますか? – axcelenator

+1

はい、絶対に - 私はあなたが使用すべきアプローチだと思います –

答えて

3

の代わりにあなたがギザギザのいずれかを使用する場合があります2D配列。簡単に言えば、2D配列は常にN x Mの行列ですが、サイズを変更することはできませんが、ギザギザの配列は配列の配列で、内部の要素を別のサイズで個別に初期化することができます(詳細はhereを参照してください)

int maxBound = 100; 
Random rnd = new Random(); 
int numLoops = rnd.Next(1000, 1200); 

string[][] jagged = new string[numLoops][]; 

for (int i = 0; i < numLoops; i++) 
{ 
    int currLen = rnd.Next(maxBound); 
    jagged[i] = new string[currLen]; 

    for (int j = 0; j < currLen; j++) 
     jagged[i][j] = "*"; // do some initialization 
} 
1

リストにネストされたタイプstringのリストを使用する必要があります。次に、このリストを変更することができます。これを反復するには、2つのforループを使用する必要があります。

List<List<string>> l = new List<List<string>> { new List<string> { "a", "b" }, new List<string> { "1", "2" } }; 

反復例:

for(int i = 0; i < l.Count; i++) 
     { 
      for(int j = 0; j < l[i].Count; j++) 
      { 
       Console.WriteLine(l[i][j]); 
      } 
     } 
関連する問題