Pergunta

Olá eu tenho um problema com C # Arrays. Eu preciso de uma matriz para armazenar alguns dados de lá ... Meu código é que

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

Mas o compilador diz: var não definido Como posso definir uma matriz dupla sem tamanho fixo? Muito obrigado!

Foi útil?

Solução

Arrays são sempre fixos em tamanho, e têm de ser definidos assim:

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};

A classe List<T> usa uma matriz no fundo e redefine-lo quando ele é executado fora do espaço:

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();

É possível percorrer um List<T> tal como faria um array:

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]);
}

Outras dicas

Pelo que vejo você não declarar a variável zaehlMittel. Eu acho que isso é o que o compilador reclama.

Além disso, mesmo que você pode, naturalmente, determinar o valor dessa variável por meio de programação, o momento em que você quer criar uma matriz seu tamanho deve ser conhecido. Esta é a maneira matrizes trabalho.

No caso de você não pode fazer isso facilmente, eu sugiro usar algum tipo de estrutura de dados dinâmica, como uma lista ou um conjunto. Então, uma vez todos os elementos foram adicionados, que são, naturalmente, ainda livre para criar uma matriz de que, como a essa altura você souber o número de elementos (embora existam métodos de conveniência como toArray() que vai mesmo cuidar disso).

Você tem que instanciar a matriz antes de usá-lo:

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

A solução óbvia que vem à mente é a utilização de uma lista:

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

Mas se você não deseja converter a partir de uma lista para uma matriz você pode crescer a matriz depois:

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
}

Não é o ideal, como você está fazendo um monte de trabalho que List está fazendo nos bastidores -. Provavelmente muito mais eficientemente do que você pode

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top