格式化为矩阵形式
问题描述:
我尝试使用他们在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();
提前感谢!
答
至少有两种方法可以做到这一点。
起初你的例子将输出文本
17个字:
这是因为当你分割字符串的所有指定字符你得到的许多空的字符串,摆脱他们添加StringSplitOptions.RemoveEmptyEntries
选项Split
方法。
string[] words = text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
现在你会得到
9字文本:简单
for
环
你可以得到3×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;
}