如何获得string [] []

时间:2017-07-17 08:51:17

标签: c# .net arrays multidimensional-array

我将二维数组字符串定义为

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)

4 个答案:

答案 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))