c# - 在 C# 中,是否可以有一个大数组,然后是指向较大数组的子部分的较小数组?

标签 c# arrays pointers

我想要一个数组,将我类的所有参数保存在一个数组中,然后让每个参数指向它们在大数组中的位置。

我想这样做的原因是因为我要优化一个基于所述参数的函数,但是最小化要求所有参数都在一个数组中——我不想复制这个数组在每一步都来回移动——我宁愿让各个参数指向它们在主数组中的位置。像这样:

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 在这个例子中) - 每个参数的数量在这里是相同的,但我更愿意一个允许它是通用的解决方案。

这也将允许我更改 ABC 的元素,并更新保存它们的数组。

我需要将包含所有数据的数组作为单个连续数组进行优化,因此仅执行 parameters = new double[]{A,B,C}; 是行不通的- 除非有一种方法我可以像访问单个数组一样访问它;我的理解是锯齿状数组虽然在内存中不连续,而且我对矩形数组不够熟悉,无法在这里做我想做的事。

最佳答案

这在 .NET 中是不可能的。数组不是指针。

为此,您必须使用数组以外的类型。如果你想引用数组的一部分,你可以使用 ArraySegment<T>类型。您还可以创建自定义 IList<T>包装数组的一部分。

也许答案会变成没有实际的方法来实现你想要的。我相信正在做的工作是向 .NET 添加“切片”,这些切片能够以您想要的方式引用内存范围。这项工作正在 Github 上的 corefxlab 存储库中完成。

关于c# - 在 C# 中,是否可以有一个大数组,然后是指向较大数组的子部分的较小数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815330/

相关文章:

php - 如何在 php 中进行数组转换或转换

java - 如何将多维整数数组复制到另一个多维整数数组

c# - Linq 到实体 (EF) : How to get the value of a FK without doing the join

c# - 如何在 XAML 中显示我的枚举?

检查当前时间的数据结构,如果找到则删除?

c++ - 我应该删除作为参数传递给函数的指针吗?

c++ - 通过引用传递指针

C++指针疑惑

c# - LinkedList 比 List 迭代更快?

c# - 自动更新(div、span 等...)