Je viens de commencer à apprendre le C # et dans l’introduction aux tableaux, ils ont montré comment établir une variable sous forme de tableau, mais il semble qu’il faille spécifier la longueur du tableau lors de l’affectation tableau?
Les tableaux doivent avoir une longueur. Pour permettre un nombre quelconque d'éléments, utilisez la classe List
.
Par exemple:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
Utilisez List<>
pour construire un 'tableau' de longueur inconnue.
Utilisez List<>.ToArray()
pour renvoyer un tableau réel et non une List
.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
Vous pouvez créer un tableau dont la taille est définie sur une variable, c.-à-d.
int size = 50;
string[] words = new string[size]; // contains 50 strings
Cependant, cette taille ne peut pas changer plus tard si vous décidez que vous avez besoin de 100 mots. Si vous souhaitez que la taille soit vraiment dynamique, vous devrez utiliser un type de structure de données différent. Essayez List
.
Quelques informations de base:
Comme dit, si vous voulez avoir une collection dynamique de choses, utilisez un List<T>
. En interne, une liste utilise également un tableau pour le stockage. Ce tableau a une taille fixe, comme tout autre tableau. Une fois qu'un tableau est déclaré comme ayant une taille, il ne change pas. Lorsque vous ajoutez un élément à une List
, il est ajouté au tableau. Initialement, la List
commence avec un tableau qui, je crois, a une longueur de 16. Lorsque vous essayez d’ajouter le 17e élément à la List
, il se produit qu’un nouveau tableau est alloué, soit (je pense) deux fois la taille du ancien, donc 32 articles. Ensuite, le contenu de l'ancien tableau est copié dans le nouveau tableau. Ainsi, bien qu'une List
puisse paraître dynamique pour l'observateur extérieur, elle doit également respecter les règles en interne.
Et comme vous l'avez peut-être deviné, la copie et l'allocation des tableaux ne sont pas gratuites; vous devez donc viser à en avoir le moins possible. Pour ce faire, vous pouvez spécifier (dans le constructeur de List
) la taille initiale du tableau. , qui dans un scénario parfait est juste assez grand pour contenir tout ce que vous voulez. Cependant, il s’agit d’une micro-optimisation et il est peu probable que cela compte pour vous, mais il est toujours agréable de savoir ce que vous êtes. réellement Faire.
Utilisez ArrayList
si .NET 1.x ou List<yourtype>
si .NET 2.0 ou 3.x.
Recherchez-les dans System.Collections
et System.Collections.Generics
.
Vous pouvez également consulter les dictionnaires si vos données sont uniques. Cela vous donnera deux colonnes avec lesquelles travailler.
Nom d'utilisateur, facture totale
il vous donne de nombreux outils intégrés pour rechercher et mettre à jour uniquement la valeur.
En un mot, veuillez utiliser Collections et génériques.
C’est un must pour tout développeur C #, cela vaut la peine d’apprendre :)
var yummy = new List<string>();
while(person.FeelsHappy()) {
yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
"until I finished making it!");
essayez une liste générique au lieu d'un tableau
Comme indiqué ci-dessus, la liste générique <> est le meilleur moyen de le faire.
Si vous êtes bloqué dans .NET 1. *, vous devrez alors utiliser la classe ArrayList. Cela ne nécessite pas de vérification de type à la compilation et vous devez également ajouter casting - messy.
Les versions successives ont également implémenté diverses variantes, y compris des variantes thread-safe.
Si vous devez vraiment utiliser un tableau au lieu d'une liste, vous pouvez créer un tableau dont la taille est calculée au moment de l'exécution,.
par exemple, je veux un tableau à deux dimensions de taille n sur n. n sera obtenu au moment de l'exécution par l'utilisateur
int n = 0;
bool isInteger = int.TryPase(Console.ReadLine(), out n);
var x = new int[n,n];