2017-07-17 138 views
-1

我已經串的2D陣列定義爲如何獲得字符串的長度[] []

string[][] input_data; 

我可以通過input_data.GetLength(0) 計數的行數,但如果我使用input_data.GetLength(1)得到列的數目,我總是得到

System.IndexOutOfRangeException未處理 Message = Index超出了數組的範圍。 源= mscorlib程序 堆棧跟蹤: 在System.Array.GetLength(的Int32尺寸) ...

我也注意到,在調試時,當我將鼠標懸停我的鼠標我的陣列上(畢竟數據已經插入)它僅示出了第一數值(行數)這樣的:input_data| {string[18][]},如果我繼續展開數組然後它顯示了所有與該列數據的18個數據,如:

enter image description here

如何我能得到列的數量嗎? (在這種情況下,它是139)

+0

我不認爲ToArray的工作方式與多維數組。 –

+0

你試過input_data [0] .getLength(0)嗎? – Bhoke

+0

我在代碼中看不到變量「data」 – Bahrom

回答

6

你貼什麼是鋸齒狀數組,而不是多維數組。這是一個包含其他數組的一維數組。沒有第二個維度,所以你不能使用data.GetLength(1)。每行可以有不同數量的列。

你可以得到data.Max(r=>r.Length)data.Min(r=>r.Length),最小或最大列數爲每一行如:

var s=new string[][]{ 
    new[] {"a","b"}, 
    new[] {"a"} 
}; 

Console.WriteLine("{0} {1}",s.Max(r=>r.Length),s.Min(r=>r.Length)); 

將打印

2 1 

要指定一個多維數組,你需要使用[,]語法:

var s=new string[,]{ 
    {"a","b"}, 
    {"c","d"}, 
    {"e","f"} 
}; 

Console.WriteLine("{0} {1}",s.GetLength(0),s.GetLength(1)); 

這將返回:

3 2 
3

對GetLength(1)會,如果你有一個多維數組工作:

string[,] input_data = new string[27,139]; 
var columns = input_data.GetLength(1); 

你現在有什麼是交錯數組不是二維數組,所以難保所有項目('行')具有相同數量的元素('列')。 但是如果你不能使用多維數組出於某種原因,你是肯定的投入將是這樣,你可以使用的第一個元素的長度input_data [0]。長度

1

我想你混淆了一個數組的數組和多維數組,運行此代碼:

string[][] array_of_arrays = new string[5][]; 
    Console.WriteLine(array_of_arrays.Length); 
    array_of_arrays[0] = new string[5]; 
    array_of_arrays[1] = new string[6]; 
    Console.WriteLine(array_of_arrays[0].Length); 
    Console.WriteLine(array_of_arrays[1].Length); 
    string[,] multi_d_array = new string[4,2]; 
    Console.WriteLine(multi_d_array.GetLength(0)); 
    Console.WriteLine(multi_d_array.GetLength(1)); 
1

這是一個交錯數組。您可以將第一個尺寸大小設爲'input_data.GetLength(0)',將第二個尺寸大小設爲'input_data.GetLength(1)'。試試吧

例子:

string[,] input_data = new string[5,12]; 
var column1 = input_data.GetLength(0); 
var column2 = input_data.GetLength(1); 
相關問題