如何获取string [] []的长度

Ron*_*ing -1 .net c# arrays multidimensional-array

我将2D数组的字符串定义为

string[][] input_data;
Run Code Online (Sandbox Code Playgroud)

我可以计算行数,input_data.GetLength(0) 但如果我input_data.GetLength(1)用来获取列数,我总是得到

System.IndexOutOfRangeException未处理Message = Index超出了数组的范围.Source = mscorlib StackTrace:在System.Array.GetLength(Int32维度)...

我还注意到在调试时,当我将鼠标悬停在我的数组上时(在插入所有数据之后),它只显示第一个值(行数)input_data| {string[18][]},如果我继续展开数组,那么它显示所有18列数据与列数据,如下所示:

在此输入图像描述

如何获得列数?(在这种情况下是139)

Pan*_*vos 7

你发布的是一个锯齿状的数组,而不是一个多维数组.它是包含其他数组的一维数组.没有第二个维度,所以你不能使用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));
Run Code Online (Sandbox Code Playgroud)

将打印

2 1
Run Code Online (Sandbox Code Playgroud)

要指定多维数组,需要使用以下[,]语法:

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

Console.WriteLine("{0} {1}",s.GetLength(0),s.GetLength(1));
Run Code Online (Sandbox Code Playgroud)

这将返回:

3 2
Run Code Online (Sandbox Code Playgroud)