我有120個字符的文本字符串。我想製作2維字符數組,6行20個字符。我想知道我是否可以更有效地使用更少的變量?謝謝。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;
}
}
我有120個字符的文本字符串。我想製作2維字符數組,6行20個字符。我想知道我是否可以更有效地使用更少的變量?謝謝。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;
}
}
你可能不喜歡這樣:
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];
}
}
您可以使用ToCharArray方法只有一個循環:
char [][] array = new char[6][];
for (int i = 0; i < 6; i++)
{
array[i] = text.Substring(i * 20, 20).ToCharArray();
}
.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();
'rowIdx * colIdx'肯定是錯的! –
你說得對,修好了。 – yper
我錯了,恐怕。我認爲它應該是'rowIdx * 20 + colIdx'。 –