如何在 C# 中将多暗数组转换为泛型集合

本文关键字:转换 数组 泛型 集合 | 更新日期: 2023-09-27 18:31:08

我正在尝试重构一些严重依赖多维数组的旧代码。当我需要读取大量数据时,我遇到了问题。我已经发现我应该改用通用集合。但我只能找到简单数组的样本。

以下是要清除的部分代码:

// Declare:
private double[,] cpoints;
// Init:
this.cpoints = new double[this.Np, 3];
// Writing:
this.cpoints[indx, 0] = x;
this.cpoints[indx, 1] = y;
this.cpoints[indx, 2] = z;
// Reading:
double dx = this.cpoints[0, 0] - this.cpoints[1, 0];

数组的第一维可能非常大。由于我的搜索,我认为我需要字典中的列表,但我无法正确。

谁能指出我正确的方向?有些样品真的很棒。

顺便说一句。我正在使用 VS2008 和 .NETv3.5

编辑:

该代码是 MapWindow 开源 GIS 应用程序 (www.mapwindow.org) 的克里金法实现的一部分。这个插件在少量点下工作正常,但对于较大的点,我们会遇到内存问题。数组可以容纳的最大大小是多少?我读到最好使用 List,所以我正在尝试重构代码,以便它可以处理更多点。达米斯的回答似乎不错。我会尝试的。代码具有更多的多调光数组。我也需要看看这些。很可能我稍后会问一些关于它们的问题;)

谢谢。

如何在 C# 中将多暗数组转换为泛型集合

public class CPoint
{
    public double X { get; set; }
    public double Y { get; set; }
    public double Z { get; set; }
}

宣:

private List<CPoint> cpoints;

初始化:

this.cpoints = new List<CPoint>(this.Np);

写作:

this.cpoints[indx].X = x;

读数:

double dx = this.cpoints[0].X - this.cpoints[1].X;

您也可以更改下面的类

public class  CPoint<T>
{
    public T X { get; set; }
    public T Y { get; set; }
    public T Z { get; set; }
}

然后,您可以使用其他类型,例如int

var cpoints = new List<CPoint<int>>(45);
int dx = cpoints[0].X - cpoints[1].X;