如何从文本文件中填充多维数组?

时间:2013-11-21 18:48:43

标签: c# wpf arrays multidimensional-array

编辑:

原始值如下:

        mArray[0, 0] = 0;
        mArray[0, 1] = 1;
        mArray[0, 2] = 2;
        mArray[0, 3] = 3;
        mArray[1, 0] = 0;
        mArray[1, 1] = 1;
        mArray[1, 2] = 2;
        mArray[1, 3] = 3;
        mArray[2, 0] = 0;
        mArray[2, 1] = 2;
        mArray[2, 2] = 2;
        mArray[2, 3] = 3;
        mArray[3, 0] = 0;
        mArray[3, 1] = 1;
        mArray[3, 2] = 3;
        mArray[3, 3] = 3;

然后我将所有值存储在一个文本文件中,这就是为什么我在文本文件中拥有这样的所有值...

0
1
2
3
0
1
2
3
0
2
2
3
0
1
3
3

我真正的问题是如何从文本文件中重新填充相同的数组?

int mArray[,];

如何从存储在文本文件中的数据填充数组?与往常一样,使用C#,在本例中为WPF。

2 个答案:

答案 0 :(得分:1)

我不完全确定你的问题 你只是试图用文件的行填充数组吗? 这很简单,这样就可以了:

int[] mArray = File.ReadAllLines("pathAndFilename").Select(x => int.Parse(x)).ToArray();

这还够吗? 如果没有,请稍微澄清一下你的问题。

使用更多信息我想你想要更像这样的东西:

        private static int[,] FillArrays(string file, int rightLength)
        {
            int[] mArray = File.ReadAllLines(file).Select(x => int.Parse(x)).ToArray();
            int size = mArray.Length / rightLength;
            if (((mArray.Length ^ rightLength) >= 0) && (mArray.Length % rightLength != 0))
            {
                size++;
            }
            int[,] arrayDos = new int[size, rightLength];
            int counter = 0;
            int arrayNum = 0;
            foreach (int i in mArray)
            {
                arrayDos[arrayNum, counter] = i;
                counter++;
                if (counter == rightLength)
                {
                    counter = 0;
                    arrayNum++;
                }
            }
            return arrayDos;
        }

并称之为:

int[,] mArray = FillArrays(@"Z:\testnums.txt", 4);

您可以传入右侧尺寸:

{int[8, 2]}
    [0, 0]: 0
    [0, 1]: 1
    [0, 2]: 2
    [0, 3]: 3
    [1, 0]: 0
    [1, 1]: 1
    [1, 2]: 2
    [1, 3]: 3
    [2, 0]: 0
    [2, 1]: 2
    [2, 2]: 2
    [2, 3]: 3
    [3, 0]: 0
    [3, 1]: 1
    [3, 2]: 3
    [3, 3]: 3

2也适用于您的示例数据。

{int[8, 2]}
    [0, 0]: 0
    [0, 1]: 1
    [1, 0]: 2
    [1, 1]: 3
    [2, 0]: 0
    [2, 1]: 1
    [3, 0]: 2
    [3, 1]: 3
    [4, 0]: 0
    [4, 1]: 2
    [5, 0]: 2
    [5, 1]: 3
    [6, 0]: 0
    [6, 1]: 1
    [7, 0]: 3
    [7, 1]: 3

答案 1 :(得分:1)

你可能意味着这样的事情? 此函数尽可能地填充二维数组。如果您有一个5x5数组和7行,则该函数返回一个5 * 5数组,其中包含前7个单元格({0,0},{0,1},{0,2},{0,3},{0 ,4},{1,0},{1,1})设置为文本文件中的任何内容。剩下的单元格为空。

    public static string[,] GetData(int row, int column, string filePath)
    {
        int[,] data = new string[row, column];
        using (StreamReader reader = File.OpenText(filePath))
        {
            for (int r = 0; r < data.GetLength(0); r++)
            {
                for (int c = 0; c < data.GetLength(1); c++)
                {
                    if (reader.EndOfStream)
                    {
                        return data;
                    }

                    //Note that Parse throw error if the string is not a valid int
                    //use it only if you anticipate that your file contain int only and other
                    //string should be considered as errors. otherwise use TryParse
                    data[r, c] = int.Parse(reader.ReadLine());
                }
            }
        }

        return data;
    }