我将二维数组字符串定义为
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行数据,如下所示:
如何获取列数? (在这种情况下是139)
答案 0 :(得分:7)
您发布的是锯齿状数组,而不是多维数组。它是包含其他数组的1-D数组。没有第二个维度,因此您无法使用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
答案 1 :(得分:3)
GetLength(1)会起作用:
string[,] input_data = new string[27,139];
var columns = input_data.GetLength(1);
您现在拥有的是锯齿状数组而不是2D数组,因此无法保证所有项目(“行”)具有相同数量的元素(“列”)。 但是,如果由于某种原因你不能使用多维数组并且你确定输入将是那样,你可以使用第一个元素input_data [0]的长度.Length
答案 2 :(得分: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));
答案 3 :(得分:1)
这是一个锯齿状的数组。您可以将第一个尺寸大小设为'input_data.GetLength(0)',将第二个尺寸尺寸设为'input_data.GetLength(1)'。试试吧
示例:
Header form (master page)
Detail form (Detail page of Header (master page))
SubDetail form (Detail page of Detail (master page))