我尝试使用msdn上的代码:它使用foreach并将每个元素放在不同的行上。
我如何将其置于3x3矩阵格式?
char[] delimiterChars = { ' ', ',', '.', ':', '\t' ,'[' ,']', ';', '"', 'A', '=' };
string text = "A = [5 4 1; 3 6 1; 2 3 9]";
System.Console.WriteLine("Original text: '{0}'", text);
string[] words = text.Split(delimiterChars);
System.Console.WriteLine("{0} words in text:", words.Length);
foreach (string element in words)
{
System.Console.WriteLine(element);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
提前致谢!
答案 0 :(得分:0)
至少有两种方法可以做到这一点。
<强> 1 强>
首先,您的示例将输出
文字中的17个字:
这是因为当您按照所有指定的字符分割字符串时,您会获得许多空字符串,要删除它们,请将StringSplitOptions.RemoveEmptyEntries
选项添加到Split
方法。
string[] words = text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
现在你会得到
文字中的9个字:
您可以使用简单的for
循环获得3 x 3矩阵,例如
string[,] matrix = new string[3, 3];
for (int i = 0; i < 3; ++i)
{
for(int j = 0; j < 3; ++j)
{
matrix[i, j] = words[i * 3 + j];
}
}
但是,您需要知道行数和列数(或假设矩阵是正方形)。 该方法看起来像这样
public static string[,] GetMatrix1(string text, int n, int m)
{
char[] delimiterChars = { ' ', ',', '.', ':', '\t' ,'[' ,']', ';', '"', 'A', '=' };
string[] words = text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
string[,] matrix = new string[n, m];
for (int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
matrix[i, j] = words[i * m + j];
}
}
return matrix;
}
<强> 2 强>
另一种方法是首先按[
和]
分割文字,然后按;
分割行以获取行,最后按(空格)分割文本行。
char[] delimiter1 = { '[', ']' };
char[] delimiter2 = { ';' };
char[] delimiter3 = { ' ' };
string[][] words = text.Split(delimiter1)[1]
.Split(delimiter2, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(delimiter3, StringSplitOptions.RemoveEmptyEntries))
.ToArray();
您将获得string[][]
,每行的列数可能会有所不同,但如果您想要string[,]
类型,则需要进行转换。
结果,实现将像这样
public static string[,] GetMatrix2(string text)
{
char[] delimiter1 = { '[', ']' };
char[] delimiter2 = { ';' };
char[] delimiter3 = { ' ' };
string[][] words = text.Split(delimiter1)[1]
.Split(delimiter2, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(delimiter3, StringSplitOptions.RemoveEmptyEntries))
.ToArray();
string[,] matrix = new string[words.Length, words[0].Length];
for(int i = 0; i < words.Length; ++i)
{
for(int j = 0; j < words[i].Length; ++j)
{
matrix[i, j] = words[i][j];
}
}
return matrix;
}