2009-06-22 6 views
5

Bonjour j'ai un problème avec C# tableaux. Je besoin d'un tableau pour stocker des données là-dedans ... Mon code est queDéfinir un double tableau sans taille fixe?

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

Mais le compilateur dit: non défini var Comment définir un double tableau sans une taille fixe? Merci beaucoup!

Répondre

15

Les tableaux sont toujours fixés en taille, et doivent être définis comme ceci:

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

La classe List<T> utilise un tableau en arrière-plan et redéfinit quand il court d'espace:

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

vous pouvez itérer un List<T> comme vous le feriez d'un tableau:

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

comment puis-je parcourir la liste – subprime

+0

@subprime: foreach (double élément dans les articles) {...}, ou via les éléments [n] indexeur –

+0

merci! c'est la réponse :) – subprime

0

De ce que je vois vous n'avez pas déclaré la variable zaehlMittel. Je suppose que c'est ce dont se plaint le compilateur. En dehors de cela, même si vous pouvez bien sûr déterminer la valeur de cette variable par programmation, le moment où vous voulez créer un tableau sa taille doit être connu. C'est ainsi que fonctionnent les tableaux. Dans le cas où vous ne pouvez pas le faire facilement, je suggère d'utiliser une sorte de structure de données dynamique, comme une liste ou un ensemble. Ensuite, une fois que tous les éléments ont été ajoutés, vous êtes toujours libre de créer un tableau à partir de cela, car à ce moment-là vous connaissez le nombre d'éléments (même s'il existe des méthodes pratiques comme toArray()).

0

Vous avez instancier le tableau avant de l'utiliser:

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

Ne fonctionne que si zaehlMittel <10 – ChrisF

0

La solution évidente qui vient à l'esprit est d'utiliser une liste:

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

Mais si vous ne voulez pas convertir à partir d'une liste à un tableau que vous pouvez faire pousser le tableau plus tard:

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 
} 

Ce n'est pas idéal que vous faites beaucoup de le travail que fait List dans les coulisses - probablement beaucoup plus efficacement que vous ne pouvez le faire.

Questions connexes