格式化为矩阵形式

问题描述:

我尝试使用他们在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; 
}