2011-03-01 80 views
1

我需要知道如何動態地重新調整C#中的數組大小。在我下面寫的方法中,我需要能夠返回一個只包含由用戶輸入的最多8個數字的數字的數組。因此,如果用戶決定他們只想輸入3個數字,則該陣列應該只包含3個數字,而不是8個。如何創建一個動態調整大小的數組,或在c#中重新調整數組的大小?

現在我知道數組需要在實例化時包含大小。那麼如何在不使用列表的情況下解決這個問題?循環完成後有沒有辦法重新調整數組大小?

在此先感謝。

 static int[] fillArray() 
    { 
     int[] myArray; 
     myArray = new int[8]; 
     int count = 0; 
     do 
     { 
      Console.Write("Please enter a number to add to the array or \"x\" to stop: "); 
      string consoleInput = Console.ReadLine(); 
      if (consoleInput == "x") 
      { 
       Array.Resize(ref myArray, count); 
       return myArray; 
      } 
      else 
      { 
       myArray[count] = Convert.ToInt32(consoleInput); 
       ++count; 
      } 

     } while (count < 8); 

     Array.Resize(ref myArray, count); 
     return myArray; 

    } 
+0

爲什麼不使用像ArrayList或List這樣的可調整大小的集合類型? – 2011-03-01 00:27:01

+0

List <>不過是一個Count和一個Capacity屬性的數組。實現你自己的。 – 2011-03-01 01:01:52

回答

7

你可以在你的方法邏輯中使用List<int>,然後return myIntList.ToArray();

+0

...或者甚至使'fillArray'返回'IEnumerable '。 – Vlad 2011-03-01 00:27:33

+0

是的,我可以做到這一點。但我想在不使用列表的情況下完成此操作。 – Tharkis 2011-03-01 00:27:56

+0

因爲它是功課嗎? – canon 2011-03-01 00:29:25

1

通常這種類型的應用程序,你需要使用一個List。如果你真的需要一個數組,你可以使用ToArray方法,但重新考慮一個數組是否真的是你想要的。通常,List用於動態大小的集合,而不是數組。

你總是可以修改您的代碼如下:

static int[] fillArray() 
{ 
    List<int> list = new List<int>(); 

    do 
    { 
     Console.Write("Please enter a number to add to the array or \"x\" to stop: "); 
     string consoleInput = Console.ReadLine(); 

     if (consoleInput == "x") 
     { 
      return list.ToArray(); 
     } 
     else 
     { 
      list.Add(Convert.ToInt32(consoleInput)); 
     } 

    } while (count < 8); 

    return list.ToArray(); 
} 

但正如我前面提到的,真正考慮改變你的方法返回一個List和調用代碼使用List

0

那麼你可以實現你自己的方法接受數組和新的大小作爲參數,將創建新的數組,深入複製元素,然後分配給你的數組。 Array.Resize()也是這樣,你可以用反彙編看它