2012-12-07 57 views
-2

我想將上面的數組轉換爲列表以避免數組中元素的聲明數量,但無法實現它,因爲這很明顯,如果我嘗試在數組中執行相同的操作名單我會得到一個指數超出限制的例外..一直試穿了一天。我在這裏粘貼了我正在面臨問題的那部分邏輯。對基類中的函數進行遞歸調用(這不應該只是爲了回答這個問題,而只是說明問題)。 請幫我一把。避免使用數組的大小c#

int[] arr = new int[100];   
    Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();   

    public override int function(int length, out List<int> cuts) 
    { 
     cuts = new List<int>(); 
     if (length < 0) 
      return 0; 

     if (arr[length] == 0) 
     { 
      arr[length] = base.Function(length, out cuts); 
      dict.Add(arr[length], cuts);         
     } 
     cuts = dict[arr[length]]; 
     return arr[length]; 
    } 
+0

您的代碼有許多問題,例如:'ARR [長度]' – trebuchet

+0

如果陣列和它的長度以正常方式,那麼'陣列[長度]被解釋'超出範圍(根據定義C#基於零的數組索引)。我們缺少什麼? –

+0

對不起,我糾正他們 – user1301449

回答

0

只是擴大如果「動態增長」列表的length(應該是index)列表小於索引(在您的情況下的「長度」)。

List<int> arr = new List<int>();   
Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();   

public override int function(int length, out List<int> cuts) 
{ 
    cuts = new List<int>(); 
    if (length < 0) 
     return 0; 

    if (arr.Count <= length) 
    { 
     arr.AddRange(new int[(length + 1) - arr.Count]) 
    } 

    if (arr[length] == 0) 
    { 
     arr.Insert(length,base.Function(length, out cuts)); 
     dict.Add(arr[length], cuts);         
    } 
    cuts = dict[arr[length]]; 
    return arr[length]; 
} 
+0

這是遞歸函數,所以每次我們這樣做時都會操縱列表,這不應該發生。 – user1301449

+0

誰清除了列表? (這個問題在你的問題中並不明顯),你在談論什麼?arr或cuts? –

+0

對不起,我正在談論陣列 – user1301449

0

不能創建一個沒有大小的數組。你需要使用一個列表。

如果你沒有使用背後陣具體的原因,更好地使用List

List<int> arr = new List<int>(); 

,最後你可以將其轉換爲Array另:

int[] s = arr.ToArray(); 
+0

如果我嘗試使用列表,因爲索引不存在,List [length]將引發錯誤。值的長度隨機變化。 – user1301449

+0

列表並且數組的索引從0到(length-1)。 – thersch

+0

再次閱讀問題:「我想將上面的數組轉換爲列表」 –