고정 된 크기없이 이중 배열을 정의 하시겠습니까?
문제
안녕하세요 저는 C# 배열에 문제가 있습니다. 데이터를 저장하려면 배열이 필요합니다 ... 내 코드는
double[] ATmittelMin;
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
그러나 컴파일러는 다음과 같이 말합니다. 정의되지 않음 var는 어떻게 고정 된 크기없이 이중 배열을 정의 할 수 있습니까? 정말 감사합니다!
해결책
배열은 항상 크기가 고정되어 있으며 그렇게 정의해야합니다.
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();
당신은 a를 반복 할 수 있습니다 List<T>
배열처럼 :
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
무대 뒤에서하고 있습니다 - 아마도 당신이 할 수있는 것보다 훨씬 더 효율적일 것입니다.