C#: double[][] and double[,]

本文关键字:double and | 更新日期: 2023-09-27 18:24:55

我混淆了C#中的double[][]和double[,]
我的队友给我一个这样的函数:

public double[][] Do_Something(double[][] A)
{
     .......
}

我想使用这个功能:

double[,] data = survey.GetSurveyData(); //Get data
double[,] inrma = Do_Something(data);

它导致了一个错误:无效的参数
我不想编辑我队友的代码
它有办法把double[][]转换成double [,]吗?

谢谢!

C#: double[][] and double[,]

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}};   

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

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

double[,]是"矩形",因此所有元素的长度都相同。

你可以写一个方法在两者之间"转换",但你将如何纠正差异?也就是说,你将如何决定从长元素中"修剪"或扩展短元素以使其成为矩形?

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;
}

它们是两种不同类型的数组。

double[][]是锯齿状阵列,它是阵列的阵列;这些阵列中的每一个都可能具有不同的长度,这会导致问题。

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

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