我想要一个数组,将我类的所有参数保存在一个数组中,然后让每个参数指向它们在大数组中的位置。
我想这样做的原因是因为我要优化一个基于所述参数的函数,但是最小化要求所有参数都在一个数组中——我不想复制这个数组在每一步都来回移动——我宁愿让各个参数指向它们在主数组中的位置。像这样:
class myClass{
int nVariables;
public double[] parameters; //length = X * nVarialbes
public double[] A; //length = X
public double[] B; //length = X
public double[] C; //length = X
}
其中 parameters
实际上类似于 [a1,a2,a3,b1,b2,b3,c1,c2,c3]
(其中 X== 3
在这个例子中) - 每个参数的数量在这里是相同的,但我更愿意一个允许它是通用的解决方案。
这也将允许我更改 A
、B
和 C
的元素,并更新保存它们的数组。
我需要将包含所有数据的数组作为单个连续数组进行优化,因此仅执行 parameters = new double[]{A,B,C};
是行不通的- 除非有一种方法我可以像访问单个数组一样访问它;我的理解是锯齿状数组虽然在内存中不连续,而且我对矩形数组不够熟悉,无法在这里做我想做的事。
最佳答案
这在 .NET 中是不可能的。数组不是指针。
为此,您必须使用数组以外的类型。如果你想引用数组的一部分,你可以使用 ArraySegment<T>
类型。您还可以创建自定义 IList<T>
包装数组的一部分。
也许答案会变成没有实际的方法来实现你想要的。我相信正在做的工作是向 .NET 添加“切片”,这些切片能够以您想要的方式引用内存范围。这项工作正在 Github 上的 corefxlab 存储库中完成。
关于c# - 在 C# 中,是否可以有一个大数组,然后是指向较大数组的子部分的较小数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815330/