2016-11-12 20 views
3

私は120文字の文字列を持っています。 2次元のchar配列、20行の6行を作りたい。より少ない変数を使用して、これをより効率的に行うことができるのだろうか?ありがとう。C#より効率的に2次元配列に文字を書き込む

ループ:

int i = 0, u = 0; 

for (int x = 0; x < 120; x++) 
{ 
    array[i, u] = text[x]; 

    u++; 

    if (u == 19) 
    { 
     i++; 
     u = 0; 
    } 
} 

答えて

4

このようにあなたがそれを行う可能性があります:あなたはメソッドと一つだけのループToCharArray使用する場合があります

int numRows = 6; 
int numCols = 20; 
for (int rowIdx = 0; rowIdx < numRows; rowIdx++) 
{ 
    for (int colIdx = 0; colIdx < numCols; colIdx++) 
    { 
     array[rowIdx, colIdx] = text[rowIdx * numCols + colIdx]; 
    } 
} 
+0

'rowIdx * colIdx'は間違っています! –

+0

あなたは正しい、固定されています。 – yper

+0

まだ間違っています、私は恐れています。 'rowIdx * 20 + colIdx'にする必要があります。 –

2

:.NETギザギザの配列で

char [][] array = new char[6][]; 
for (int i = 0; i < 6; i++) 
{ 
    array[i] = text.Substring(i * 20, 20).ToCharArray(); 
} 
2

をしています境界チェックのために矩形配列よりも少し効率的です。

var s = string.Concat(Enumerable.Range(0, 6).Select(i => i + "123456789 123456789")); 

var a = new char[][] { s.ToCharArray(0, 20), s.ToCharArray(20, 20), s.ToCharArray(40, 20), 
        s.ToCharArray(60, 20), s.ToCharArray(80, 20), s.ToCharArray(100, 20) }; 

// or a bit less efficient LINQ version 
char[][] arr = Enumerable.Range(0, 6).Select(i => s.ToCharArray(i * 20, 20)).ToArray(); 
関連する問題