2010-03-03 2 views
1

Я хочу изменить размер массива. Все было бы в порядке, но в примере я нахожу, что кто-то использует Array.Resize() для изменения размера одного массива измерений, но я хочу иметь возможность создать jagged array. Я читал из строки файла, в которой это может быть несколько чисел, разделенных пробелом - поэтому мне нужен массив с зазубренным массивом, созданный динамически. Это мой класс, когда я использую его, но мой массив не размер :(изменить размер динамического массива

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

Почему бы не использовать список или Список вместо рваного массива? –

ответ

4

Может быть, я не понимая ваш случай использования, но это, кажется, что если у вас есть структура данных, которая, как вам известно, потребуется изменить, лучше использовать список или связанную структуру, а не массив. Вы всегда можете преобразовать список обратно в массив в конце через .ToArray() добавлено linq.

Аналогичным образом, если вы используете дженерики, вы можете убедиться, что у вас есть строго типизированный многомерный список. также используйте пару списков внутри себя и создайте свой собственный класс, который их обертывает.

+0

Tnx за советом;) Я нахожу ArrayList и что-то в этом роде: ArrayList MainArray = new ArrayList(); MainArray.Add (новый ArrayList()); (MainArray [1] как ArrayList) .Add («Hello»); Возможно, это помогает кому-то, как и мне;) – netmajor

1

Я не понимаю, почему вы хотите использовать массив здесь, а не автоматически изменение размера коллекции, однако взглянуть на эту ссылку на MSDN, которая показывает «изменение размера» и использование зазубренных массивов в C#:

+0

, но с этим является некоторым недостатком, что я должен инициализировать размер массива в начале, поэтому я использую ArrayList. – netmajor

Смежные вопросы