调整动态数组大小

时间:2010-03-03 19:27:48

标签: c# arrays

我想调整我的数组动态。一切都会好的,但在例子中我发现有人使用Array.Resize()来调整一个维度数组的大小,但我希望有可能创建锯齿状数组。我从文件行读取,其中可能是一些空格分开的数字 - 因此我需要创建动态的锯齿状数组。 当我使用它时,这是我的课,但我的数组不会调整大小:(

class Program
{
    int[][] nodesMatrix = null;
    private void ReadFromFile(string fileName)
    {

        string line;
        int nodesNr;

        if(File.Exists(fileName) )
        {
            StreamReader fileReader = null;
            try
            {
                fileReader = new StreamReader(fileName);
                int lineNr = 0;
                while ((line = fileReader.ReadLine()) != null)
                {
                   int connectionsNr = 0;
                    if (lineNr==0)
                    {
                        nodesNr = Convert.ToInt32(line);
                        nodesMatrix = new int[nodesNr][];
                        for (int i = 0; i < nodesNr;i++ )
                        {
                            nodesMatrix[i] = new int[1];
                        }
                    }
                    else
                    {

                        string tmpNumber = null;
                        foreach (char sign in line)
                        {

                            if (sign != ' ')
                            {

                                tmpNumber += sign;

                            }
                            if (sign == ' ')
                            {

                                if (tmpNumber != null)
                                {

                                    //nodesMatrix[lineNr] = new int[connectionsNr+1];
                                    nodesMatrix[lineNr][connectionsNr] = Convert.ToInt32(tmpNumber);
                                    connectionsNr++;
                                    Array.Resize<int>(ref nodesMatrix[lineNr], connectionsNr); //here i try to resize array                                      

                                }
                                tmpNumber = null;
                            }
                        }
                    }
                     lineNr++;
                }
            }
            finally
            {
                if (fileReader != null)
                    fileReader.Close();
            }
        }

也许你知道该怎么做?

2 个答案:

答案 0 :(得分:4)

也许我不理解你的用例,但在我看来,如果你有一个你知道需要调整大小的数据结构,那么最好使用List或相关结构,而不是数组。您始终可以通过linq添加的.ToArray()扩展名将列表转换回数组。

同样,如果您使用泛型,则可以确保您具有强类型的多维列表。你也可以在内部使用一对列表,并创建自己的类来包装它们。

答案 1 :(得分:1)

我不明白你为什么要在这里使用数组而不是自动调整大小的集合,但是看看MSDN上的这个链接,它显示了“调整大小”并在C#中使用了锯齿状数组: