94 votes

Tableau d'une longueur inconnue en C#

Je viens de commencer à apprendre le C# et dans l'introduction aux tableaux, ils ont montré comment établir une variable comme un tableau, mais il semble que l'on doive spécifier la longueur du tableau lors de l'affectation, alors que faire si je ne connais pas la longueur du tableau ?

124voto

Samuel Points 21085

Une longueur doit être attribuée aux tableaux. Pour permettre un nombre quelconque d'éléments, utilisez l'option List classe.

Par exemple :

List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3

3 votes

List<int[]> myInts = new List<int[]>(); pourrait fonctionner.

2 votes

Si une longueur doit être attribuée aux tableaux, alors pourquoi puis-je faire cela ? String[] arr = "test;the;values;now".Split(';') ; et cela détermine simplement la longueur ? Et pourtant, je ne peux pas prendre cette même ligne de code et déplacer la déclaration de variable sur une autre ligne.

0 votes

@matthew_360 A l'intérieur de la fonction split, le tableau est en fait appelé avec une taille fixe. Exemple : referencesource.microsoft.com/#mscorlib/system/

53voto

TFD Points 10618

Utilisez List<> pour construire un "tableau" de longueur inconnue.

Utilisez List<>.ToArray() pour retourner un tableau réel, et non un List .

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();

0 votes

Pour moi, la liste a résolu le problème de la taille inconnue, et ensuite .ToArray() a créé le tableau dont j'avais besoin.

3 votes

En utilisant System.Collections.Generic ;

26voto

JulianR Points 7257

Un peu d'information de base :

Comme nous l'avons dit, si vous souhaitez disposer d'une collection dynamique d'éléments, utilisez un fichier de type 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, celle-ci ne change pas. Lorsque vous ajoutez un élément à une List il est ajouté au tableau. Au départ, le List démarre avec un tableau qui, je crois, a une longueur de 16. Lorsque vous essayez d'ajouter le 17ème élément au tableau List Ce qui se passe, c'est qu'un nouveau tableau est alloué, qui fait (je pense) deux fois la taille de l'ancien, donc 32 éléments. Ensuite, le contenu de l'ancien tableau est copié dans le nouveau tableau. Ainsi, alors qu'un List peut sembler dynamique à l'observateur extérieur, mais en interne, elle doit également se conformer aux règles.

Et comme vous l'avez peut-être deviné, la copie et l'allocation des tableaux n'est pas gratuite. Il faut donc chercher à en avoir le moins possible et pour cela, vous pouvez spécifier (dans le constructeur de List ) une taille initiale du tableau, qui, dans un scénario parfait, est juste assez grande pour contenir tout ce que vous voulez. Cependant, il s'agit d'une micro-optimisation et il est peu probable que cela ait une quelconque importance pour vous, mais il est toujours bon de savoir ce que vous êtes en train de faire. en fait faire.

2 votes

C'est précisément l'information que je recherchais. C'est parfait et beaucoup plus instructif que la plupart des autres réponses. +1

17voto

mquander Points 32650

Vous pouvez créer un tableau dont la taille est définie par une variable, par exemple

int size = 50;
string[] words = new string[size]; // contains 50 strings

Cependant, cette taille ne peut pas changer par la suite, si vous décidez que vous avez besoin de 100 mots. Si vous souhaitez que la taille soit vraiment dynamique, vous devrez utiliser un autre type de structure de données. Essayez List .

1 votes

Elles sont toutes nulles. Essayez string[] words = new string(',', size - 1).Split(','); Maintenant, ils sont initialisés avec "" .

3voto

Diego Jancic Points 2445

Utilisez un ArrayList s'il s'agit de .NET 1.x, ou d'un fichier de type List<yourtype> si vous êtes en .NET 2.0 ou 3.x.

Cherchez-les dans System.Collections y System.Collections.Generics .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X