在 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?
根据您的澄清,我相信这就是您正在寻找的代码:
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();