5

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

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

我想使用这个功能:

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

它导致错误:无效参数。
我不想编辑队友的代码。
有什么办法可以转换double[][]double [,]

谢谢!

4

4 回答 4

9

A double[][] is an array of double[] (An array of arrays) but double[,] is a single 2 dimensional double array

Example :

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}};   
于 2013-07-24T12:52:36.987 回答
8

double[][] and double[,] have different meanings.

double[][] is jagged, so some elements can be of different lengths than others.

double[,] is "rectangular", so all elements are of the same length.

You could write a method to "convert" between the two, but how will you rectify the differences? I.e. how will you decide to "trim" from the long elements or expand the short elements in order to make it rectangular?

于 2013-07-24T12:52:23.673 回答
1
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;
}
于 2013-07-24T12:54:23.387 回答
1

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

double[][]是一个交错数组,它是一个数组数组;这些数组中的每一个都可以具有不同的长度,这会导致问题。

double[,]只是一个多维数组。每行将具有相同数量的列,并且每列将具有相同数量的行。

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

于 2013-07-24T12:57:26.740 回答