2017-08-15 19 views
0

我需要創建一個我不知道尺寸的數組。我使用了以下內容,但是它爲我的for -loop提供了一個索引超出範圍的錯誤。無尺寸的新空白二維數組

string[] arr = s.Split('\n'); 
int[] indices = new int[arr.Length]; 

string[][] new_arr = new string[arr.Length][]; 

for (int i = 0; i < arr.Length; i++) 
{ 
    if (arr[i].StartsWith("21")) 
    { 
     indices[i] = i; 
    } 
} 

indices = indices.Where(val => val != 0).ToArray(); //contains indices of records beginning with 21 

for (int i = 0; i < indices.Length - 1; i++) 
{ 

    new_arr[0][i] = arr[i]; 
} //first n elements 

錯誤出現在第二個for循環中。它說

對象引用未設置爲對象的實例。

但我沒有在開始處實例化字符串?

+0

如果您不知道尺寸,可以使用列表而不是按需增長的陣列 –

+0

但是這是1D否? –

+0

這是['鋸齒狀數組](https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/arrays/jagged-arrays) –

回答

0

你只需要交錯數組初始化中的每個陣列:

indices = indices.Where(val => val != 0).ToArray(); //contains indices of records beginning with 21 

// create second-level array 
new_arr[0] = new string[indices.Length] ; 

for (int i = 0; i < indices.Length - 1; i++) 
{ 
    new_arr[0][i] = arr[i]; // why 0 here? 
} 
+0

所以我想要做的是創建一個新的列(第0列)與第一個n元素從一維數組。我不知道「n」(它是動態的),因此我無法對它進行硬編碼。 0是訪問第0列(它是[我] [0],我錯誤地輸入) –

+0

無論如何,你需要創建一個固定大小的每個子數組(或使用列表和添加元素。儘管你不知道你的過程知道子數組的大小。 –

0

對於一個2維數組,你必須指定第一個維度的大小。當我看到你的代碼時,它使用了所謂的鋸齒狀數組(包含數組作爲元素的數組),而不是純粹的二維數組。

var array1 = new int[2,10]; // this is a 2 dimensional array 
var array2 = new int[2][]; // this is an array of 2 elements where each element is an `int[]` 

你可能注意到了,我們不需要指定內部元素int[]

現在你明白交錯數組的大小,你可以看到,你是不是初始化內部元素,而只是訪問它 - 並且由於默認情況下它是空的,所以你點擊了異常。

for (int i = 0; i < indices.Length - 1; i++) 
{ 
    new_arr[0][i] = arr[i]; 
} //first n elements 

在上面的代碼,你應該有new_arr[i][0] = arr[i],你也需要做new_arr[i] = new int[x]其中x是要用於內部陣列TEH大小行之前。

相關問題