[英]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.