0

多次元配列に大きく依存している古いコードをリファクタリングしようとしています。大量のデータを読み取る必要があるときに問題が発生します。代わりにジェネリック コレクションを使用する必要があることが既にわかりました。しかし、単純な配列のサンプルしか見つかりません。

クリアするコードの一部を次に示します。

// 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 Open Source GIS アプリケーション (www.mapwindow.org) のクリギング実装の一部です。このプラグインは、少量のポイントでは問題なく動作しますが、大量のポイントではメモリの問題が発生します。配列が保持できる最大サイズは? List を使用する方が良いと読んだので、より多くのポイントを処理できるようにコードをリファクタリングしようとしています。ダミスによる答えは良さそうです。やってみます。コードには複数の次元配列があります。そちらも見ていく必要があります。おそらく、後でそれらについていくつか質問するでしょう;)

ありがとう。

4

1 に答える 1

2
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;
于 2013-09-13T12:08:55.140 に答える