在 C# 中将对象数组的对象转换为多个双精度数组

本文关键字:对象 数组 双精度 转换 | 更新日期: 2023-09-27 18:35:18

问题是在多维对象数组中提取双精度数组,该数组本身保存在包含在对象类型变量中的一维对象数组中。

我正在尝试在C#程序中使用Matlab API。Matlab 脚本以 Matlab 的矩阵形式返回值,然后将其作为上述对象变量返回到 C# 程序。

返回数据的示例如下所示。返回的变量称为 result,它包含一个一维对象数组。一维对象数组包含一个 1x4 对象数组,1x4 数组中的每个对象都包含一个双精度数组。

-       result  {object[1]}
  -     [0] {object[1, 4]}
    +       [0, 0]  {double[500, 6]}
    +       [0, 1]  {double[500, 6]}
    +       [0, 2]  {double[500, 6]}
    +       [0, 3]  {double[500, 6]}

如何提取这些双数组?


更新

为了更清楚地了解相关变量,可以运行以下代码。

object result;
var resultSub1 = new object[1];
double[,] data1 = {{0,0},{0,0}};
double[,] data2 = {{0,0},{0,0}};
double[,] data3 = {{0,0},{0,0}};
double[,] data4 = {{0,0},{0,0}};
object[,] resultSub2 = { { data1, data2, data3, data4 } };
resultSub1[0] = resultSub2;
result = resultSub1;

如何提取数据 1、数据 2、数据 3 和数据 4?

在 C# 中将对象数组的对象转换为多个双精度数组

根据您的澄清,我相信这就是您正在寻找的代码:

double[,] data1, data2, data3, data4;
object[] resultArray = (object[]) result;
object[,] dataArrays = (object[,]) resultArray[0];
data1 = (double[,]) dataArrays[0, 0];
data2 = (double[,]) dataArrays[0, 1];
data3 = (double[,]) dataArrays[0, 2];
data4 = (double[,]) dataArrays[0, 3];

这只是在数据结构的每个级别适当地强制转换的问题。首先,强制转换为result值实际一维单元素数组类型。然后,检索该数组的单个元素,将其转换为它实际的二维四元素数组类型。最后,检索四个元素中的每一个,将每个元素转换为它实际存在的double值的二维数组。

有没有办法让这些双数组进入这个object result.

var subArrays = result[0];

上面将创建具有 4 个索引(double数组)的subArrays

如果您想将所有double数组合并为一个数组(即合并 4 个单独的数组),那么这应该可以工作:

var allValues = new List<double[][]>();
foreach var subArray in subArrays
{
    allValues.AddRange(subArray);
}
var allValuesArray = allValues.ToArray();