【问题标题】:C#: double[][] and double[,] [duplicate]C#:double[][] 和 double[,] [重复]
【发布时间】:2013-07-23 22:58:17
【问题描述】:

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

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

我想使用这个功能:

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

导致错误:参数无效。
我不想编辑队友的代码。
有没有办法将 double[][] 转换为 double [,]

谢谢!

【问题讨论】:

标签: c# multidimensional-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:
      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;
      }
      

      【讨论】:

      • 这只适用于非锯齿状的锯齿数组,要处理所有输入,您可以使用width = array.Max(a =&gt; a.Length),并用default(T) 填充空槽。如果您确实希望在此处进行检查,则应将其移出一个级别,因此每行仅检查一次,而不是每个单元格。
      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 2013-02-18
        • 2020-06-22
        • 2021-12-18
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多