将分隔的字符串转换为二维数组

时间:2016-07-23 17:19:15

标签: c# arrays string

我有一个两位数字的网格,写成一个用换行符和空格分隔的字符串,例如:

string grid = "58 96 69 22 \n" +
              "87 54 21 36 \n" +
              "02 26 08 15 \n" +
              "88 09 12 45";

我想把它拆分成一个4乘4的数组,这样我就可以通过像separatedGrid[i, j]这样的东西来访问它。我知道我可以使用grid.Split(' ')来分隔每行中的数字,但是如何从中获取二维数组呢?

2 个答案:

答案 0 :(得分:2)

是这样使用split

string grid = "58 96 69 22 \n87 54 21 36 \n02 26 08 15 \n88 09 12 45";

var jagged = grid.Split('\n').Select(
            x => new string[4] { x.Split(' ')[0], x.Split(' ')[1], x.Split(' ')[2], x.Split(' ')[3] }
            ).ToArray();

如果你想要一个二维数组:

var _2D = new String[jagged.Length, jagged[0].Length];
for (var i = 0; i != jagged.Length; i++)
    for (var j = 0; j != jagged[0].Length; j++)
        _2D[i, j] = jagged[i][j];

结果:

enter image description here

答案 1 :(得分:2)

所以你想要的是将分隔的多线串转换为2D阵列:

string grid = "58 96 69 22 \n" +
    "87 54 21 36 \n" +
    "02 26 08 15 \n" +
    "88 09 12 45";

var lines = grid.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Trim().Split(' ')).ToArray();

int numberOfRows = lines.Length;
int maxNumberOfColumns = lines.Max(x => x.Length);
string[,] separatedGrid = new string[numberOfRows, maxNumberOfColumns];

for (int i = 0; i < lines.Count(); i++)
{
    string[] values = lines.ElementAt(i);
    for (int j = 0; j < values.Length; j++)
    {
        separatedGrid.SetValue(values[j], i, j);
    }
}