C#更高效地向二维数组写入字符

3

我有一个长度为120字符的文本字符串。我想创建一个二维字符数组,包含6行和每行20个字符。请问是否可以用更少的变量更高效地完成这个任务?谢谢。

循环:

int i = 0, u = 0;

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

    u++;

    if (u == 19)
    {
        i++;
        u = 0;
    }
}
3个回答

4
你可以这样做:
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];
    }
}

很抱歉,还是不对。我认为应该是 rowIdx * 20 + colIdx - Mark Pattison

2
你可以使用ToCharArray方法并仅使用一个循环:
char [][] array = new char[6][];
for (int i = 0; i < 6; i++)
{
    array[i] = text.Substring(i * 20, 20).ToCharArray();
}

2
在.Net中,由于边界检查的原因,不规则数组比矩形数组更加高效。
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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接