簡體   English   中英

如何在C#中將multi-dim數組轉換為泛型集合

[英]How to convert multi-dim array to generics collection in C#

我正在嘗試重構一些嚴重依賴於多維數組的舊代碼。 當我需要閱讀大量數據時,我遇到了問題。 我已經發現我應該使用泛型集合。 但我只能找到簡單數組的樣本。

以下是要清除的代碼的一部分:

// 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];

數組的第一個維度可能非常大。 由於我的搜索,我認為我需要一個字典中的列表,但我無法做到正確。

任何人都能指出我正確的方向嗎? 一些樣品真的很棒。

BTW。 我正在使用VS2008和.NETv3.5

編輯:

該代碼是MapWindow開源GIS應用程序(www.mapwindow.org)的Kriging實現的一部分。 這個插件可以正常工作,只需少量積分,但是由於數量較大,我們會遇到內存問題。 什么是數組可以容納的最大大小? 我讀到最好使用List,所以我試圖重構代碼,以便它可以處理更多的點。 Damith的回答似乎很好。 我會試試的。 代碼具有更多的多維數組。 我也需要看一下這些。 我很可能稍后會問一些關於他們的問題;)

謝謝。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM