【问题标题】:How to convert multi-dim array to generics collection in C#如何在 C# 中将多维数组转换为泛型集合
【发布时间】:2013-09-13 12:00:04
【问题描述】:

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

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

// 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) 的 Kriging 实现的一部分。这个插件在少量点的情况下可以正常工作,但在大量点时我们会遇到内存问题。 在What is the Maximum Size that an Array can hold?,我读到使用 List 更好,所以我正在尝试重构代码,以便它可以处理更多点。 达米特的回答似乎很好。我会试试的。 该代码有更多的多维度数组。我也需要看看那些。很可能我稍后会问一些关于它们的问题;)

谢谢。

【问题讨论】:

  • 只要符合目的,多维数组就没有错误。这里的目标是什么?
  • 代码看起来很合理。
  • A List<T> 内部使用数组 T[]。字典也适用于数组。因此,如果您正在寻找更好的性能,这可能不是要走的路。 - 为什么你觉得有必要更改工作代码?
  • 感谢大家的cmets。我用一些额外的信息更新了我的问题。

标签: c# generics collections multidimensional-array


【解决方案1】:
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;

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多