Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:双[]和双[,]_C#_Multidimensional Array - Fatal编程技术网

C#:双[]和双[,]

C#:双[]和双[,],c#,multidimensional-array,C#,Multidimensional Array,我把C#中的double[]]和double[,]混淆了。 我的队友给了我这样一个功能: public double[][] Do_Something(double[][] A) { ....... } 我想使用此功能: double[,] data = survey.GetSurveyData(); //Get data double[,] inrma = Do_Something(data); 它导致错误:参数无效。 我不想编辑队友的代码。 它是否有办法将double[][]转

我把C#中的double[]]和double[,]混淆了。
我的队友给了我这样一个功能:

public double[][] Do_Something(double[][] A)
{
     .......
}
我想使用此功能:

double[,] data = survey.GetSurveyData(); //Get data
double[,] inrma = Do_Something(data);
它导致错误:参数无效。
我不想编辑队友的代码。
它是否有办法将
double[][]
转换为
double[,]


谢谢

double[][]
double[,]
有不同的含义

double[][]
是锯齿状的,因此某些元素的长度可能与其他元素不同

double[,]
为“矩形”,因此所有元素的长度相同


您可以编写一个方法来“转换”这两者,但如何纠正差异?例如,您将如何决定从长元素中“修剪”或扩展短元素以使其成为矩形?

A
double[][
是一个double[]数组(数组数组数组) 但是,
double[,]
是一个单一的二维双数组

例如:

double[] Array1 = new double[] {1,2,3};
double[] Array2 = new double[] {4,5,6};
double[][] ArrayOfArrays = new double[][] {Array1,Array2};
double[,] MultidimensionalArray = new  double[,] {{1,2}, {3,4}, {5,6}, {7,8}};   
静态T[,]转换(T[]]数组)
{
if(数组==null)
抛出新的ArgumentNullException(“数组”);
如果(array.Length==0)
返回新的T[0,0];
T[,]retval=newt[array.Length,array[0].Length];
for(int i=0;i
它们是两种不同类型的阵列


double[][]
是一个锯齿状数组,它是一个数组数组;这些数组中的每一个都可能有不同的长度,这会导致出现问题

double[,]
只是一个多维数组。每行的列数相等,每列的行数相等


这种大小差异会导致一个问题,因为对于不同的行,锯齿状数组的维数可能确实不同。如果知道锯齿状数组的确切尺寸,您可以编写一个方法在两者之间进行转换,但在这种情况下,我建议重写原始方法以接受并返回多维数组(
double[,]
)。

double[][
是锯齿状数组
double[,]
是一个多维数组。它们肯定不是同一种类型,它们的用途也有很大不同。为正确的任务使用正确的类型。可能重复的,您或您的队友确定他们之间的区别吗?这只适用于非锯齿锯齿阵列,要处理所有输入,您可以使用
width=array.Max(a=>a.Length)
,并用
默认(T)
填充空插槽。如果您确实希望签入,那么应该将其移出一个级别,这样每行只检查一次,而不是每一个单元格。
static T[,] Convert<T>(T[][] array)
{
    if (array == null)
        throw new ArgumentNullException("array");
    if (array.Length == 0)
        return new T[0, 0];
    T[,] retval = new T[array.Length, array[0].Length];
    for (int i = 0; i < array.Length; i++)
        for (int j = 0; j < array[i].Length; j++)
            if (array[i].Length != retval.GetLength(1))
                throw new Exception();
            else
                retval[i, j] = array[i][j];
    return retval;
}