質問

こんにちは、c#配列に問題があります。私はそこにいくつかのデータを保存するために配列が必要です... 私のコードはそれです

double[] ATmittelMin;
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

しかし、コンパイラは次のように述べています:定義されていない変数 固定サイズなしで二重配列を定義するにはどうすればよいですか? どうもありがとう!

役に立ちましたか?

解決

配列は常にサイズが固定されており、次のように定義する必要があります:

double[] items1 = new double[10];

// This means array is double[3] and cannot be changed without redefining it.
double[] items2 = {1.23, 4.56, 7.89};

List<T>クラスは、バックグラウンドで配列を使用し、スペースがなくなったときに再定義します。

List<double> items = new List<double>();
items.Add(1.23);
items.Add(4.56);
items.Add(7.89);

// This will give you a double[3] array with the items of the list.
double[] itemsArray = items.ToArray();

配列と同じように<=>を反復処理できます:

foreach (double item in items)
{
    Console.WriteLine(item);
}

// Note that the property is 'Count' rather than 'Length'
for (int i = 0; i < items.Count; i++)
{
    Console.WriteLine(items[i]);
}

他のヒント

私が見るところ、zaehlMittel変数を宣言していません。これがコンパイラの不満の原因だと思います。

それとは別に、もちろんその変数の値をプログラムで決定することはできますが、配列のサイズを作成する瞬間を知る必要があります。これが配列の仕組みです。

これを簡単に行えない場合は、リストやセットなどの動的なデータ構造を使用することをお勧めします。その後、すべての要素が追加されると、もちろん、要素の数を知っているので、それから配列を作成することもできます(toArray()のような便利なメソッドがありますが、 )。

使用する前に配列をインスタンス化する必要があります:

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

頭に浮かぶ明らかな解決策は、リストを使用することです:

List<double> ATmittelMin = new List<double>();
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax);

ただし、リストから配列に変換したくない場合は、後で配列を拡大できます:

double[] ATmittelMin = new double[10];
// Some code
int index = some_value;
if (index >= TmittelMin.Length)
{
    Array.Resize(ATmittelMin, index+5);  // So we're not constantly resizing the array
}

Listが舞台裏で行っている多くの作業をしているので、理想的ではありません-おそらくあなたよりもはるかに効率的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top