字符串数组GetLength(1)工作替代

时间:2019-06-06 20:35:25

标签: c# arrays

我正在使用System.IO.File.ReadAllLines来读取.txt文件。 它返回一个string[],但是人类也可以将其称为2D char数组,这正是我要放入的数组。我正在尝试找出此数组的第二维,并尽可能抽象。

string[] textFile = System.IO.File.ReadAllLines(path);
char[,] charGrid = new char[textFile.GetLength(0), textFile.GetLength(1)];

IndexOutOfRangeException: Index was outside the bounds of the array.

我知道我可以遍历数组并自己找到第二维的长度,但是我正在寻找一种简单,易读和抽象的解决方案。

ps:我输入的txt文件:

#111
1-1
-00
10-

2 个答案:

答案 0 :(得分:0)

您需要找到文件中最长行的长度(因为这种方法本质上给了您一个锯齿状的数组)。可以使用以下代码完成此操作:

int dimension = textFile.Max(line => line.Length);

您需要添加using System.Linq;才能使用Max,这将返回Length数组中所有字符串中最大的textFile的值。 br /> 然后只需将dimension(或任何您想调用的东西)放入char数组声明中即可。

char[,] charGrid = new char[szTest.Length, dimension];

答案 1 :(得分:0)

此解决方案假定每行具有相同的字符数。

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            String path = @"input.txt";
            string[] textFile = File.ReadAllLines(path);
            char[,] charGrid = new char[textFile.Length, textFile[0].Length];
            int i, j;
            i = 0;
            foreach (string line in textFile)
            {
                j = 0;
                foreach (char c in line)
                {
                    charGrid[i, j] = c;
                    j++;
                }
                i++;
            }
            Console.WriteLine(charGrid[0,0] +  "" + charGrid[0, 1] + "" + charGrid[0, 2]);
            Console.WriteLine(charGrid[1, 0] + "" + charGrid[1, 1] + "" + charGrid[1, 2]);
            Console.WriteLine(charGrid[2, 0] + "" + charGrid[2, 1] +  "" + charGrid[2, 2]);
            Console.ReadLine();
        }
    }
}