2017-07-17 113 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); 
相关问题