130 votes

Tableau dynamique en C#

Existe-t-il une méthode pour créer un tableau dynamique en C# ?

1 votes

Si vous êtes toujours coincé dans la vieille boue, en utilisant [] au lieu de List<>, vous pouvez utiliser Array.Resize(). Voici un bon exemple. dotnetperls.com/array-resize

0 votes

Le lien dotnetperls.com/array-resize ne fonctionne pas. (FYI)

0 votes

Pourquoi ne pas utiliser la liste ?

158voto

Chris Van Opstal Points 16961

Jetez un coup d'œil à Listes génériques .

17 votes

La question (bien que courte et non descriptive) ne porte pas sur une liste générique - la question pourrait porter sur dynamic[] msdn.microsoft.com/fr-GB/library/dd264736.aspx (tableau de types dynamiques) ou ExpandoObject msdn.microsoft.com/fr/us/library/ Je pourrais -1 la réponse pour ne pas mentionner ceux-ci

8 votes

@LukeTO'Brien, les dynamiques ont été introduites dans C# 4.0, qui a été publié une année entière après que cette question ait été posée. L'OP s'interrogeait probablement sur une structure de données redimensionnable telle que fr.wikipedia.org/wiki/Dynamic_array

9 votes

Les réponses consistant uniquement en des liens vers des articles ne sont pas utiles. Il n'y a aucune garantie que le lien restera actif.

98voto

JaredPar Points 333733

Développez la réponse de Chris et Migol avec un exemple de code.

Utilisation d'un tableau

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Utilisation d'une liste générique. Sous le capot, la classe List<T> utilise un tableau pour le stockage mais le fait d'une manière qui lui permet de croître efficacement.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2 votes

Cet exemple est à moitié mauvais, parce que nous avons tous deux parlé d'ArrayList

27 votes

Cette réponse est meilleure que la vôtre @Migol, car elle montre comment utiliser réellement la List<> au lieu de simplement la mentionner comme un mot-clé. "mi-mauvais" -> "mi-bon" -> bon

68voto

Mehdi LAMRANI Points 3961

Parfois, les tableaux simples sont préférés aux listes génériques, car ils sont plus pratiques (meilleures performances pour les calculs coûteux - applications d'algèbre numérique par exemple, ou pour l'échange de données avec des logiciels de statistiques comme R ou Matlab).

Dans ce cas, vous pouvez utiliser la méthode ToArray() après avoir initié votre liste dynamiquement.

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Bien sûr, cela n'a de sens que si la taille du tableau n'est jamais connue ou fixée. ex-ante . si vous connaissez déjà la taille de votre tableau à un moment donné du programme il est préférable de l'initier comme un tableau de longueur fixe. (Si vous récupérez des données à partir d'un ResultSet par exemple, vous pouvez compter sa taille et initier un tableau de cette taille, dynamiquement).

1 votes

Cela ne vaut pas la peine, tant que vous utilisez l'indexeur.

3 votes

Les Ararys ne sont pas plus pratiques (ils offrent un sous-ensemble de l'interface List<T>) et offrent presque les mêmes performances, puisque List<T> utilise un tableau régulier en dessous. Itération pour 6000000 éléments : List/for : 1971ms Tableau/for : 1864ms ( Benchmark de stackoverflow.com/questions/454916/ )

11 votes

Si vous ont pour passer un tableau à une interface, alors il doit être un tableau. Il est beaucoup plus facile de construire une liste et de la transformer en tableau juste avant de la transmettre. J'aime cette réponse plus que les autres car elle répond à la question !

36voto

Migol Points 3054

List<T> pour un modèle fortement typé, ou ArrayList si vous avez .NET 1.1 ou si vous aimez faire des castings de variables.

-1voto

SHEKHAR SHETE Points 1412

Vous pouvez également définir la longueur à partir de certains paramètres :

   int[] array = new int[someLength];

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