Tableau dynamique en C #


112

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


1
Si vous êtes toujours coincé dans l'ancien boue, en utilisant [] à la place si List <>, vous pouvez utiliser Array.Resize (). Voici un bon exemple. dotnetperls.com/array-resize
Gian

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

Réponses:


150

Jetez un œil aux listes génériques .


13
La question (bien que courte et non descriptive) ne concerne pas une liste générique - La question pourrait être dynamic[] posée à propos de msdn.microsoft.com/en-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 les mentionner
Luke T O'Brien

6
@ LukeTO'Brien, la dynamique a été introduite dans C # 4.0, qui a été publié un an après que cette question ait été initialement posée. OP posait probablement des questions sur une structure de données redimensionnable comme en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Les réponses constituées uniquement de liens vers des articles sont inutiles. Il n'y a aucune garantie que le lien restera actif.
JamEngulfer

@JamEngulfer C'est faux. Si son texte de lien était "Regardez ceci" avec "ceci" lié, je serais d'accord avec vous. Si vous supprimez le lien et regardez ce qui reste, la réponse du PO à «jeter un oeil aux listes génériques» est beaucoup d'informations pour que tout futur lecteur google ...
Lynn Crumbling

88

Développement de 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 se développer efficacement.

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

2
cet exemple est à moitié mauvais, car nous avons tous deux parlé de ArrayList
Migol

21
Cette réponse est meilleure que la vôtre @Migol, car elle montre comment utiliser réellement la liste <> au lieu de simplement la mentionner comme mot-clé. "half-bad" -> "half-good" -> good
fhugas

56

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

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

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 ni 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 lancer un tableau de cette taille, de manière dynamique)


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

2
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 normal en dessous. Itération pour 6000000 éléments: Liste / pour: 1971ms Array / pour: 1864ms (Benchmark de stackoverflow.com/questions/454916/… )
aaimnr

9
Si vous devez transmettre un tableau à une interface, ce doit être un tableau. Il est beaucoup plus facile de créer une liste et d'en faire un tableau juste avant de la transmettre. J'aime cette réponse plus que les autres car elle répond à la question!
Michael Stimson

36

List<T>pour celui qui est fortement typé, ou ArrayListsi vous avez .NET 1.1 ou si vous aimez convertir des variables.


2

Exemple de tableau dynamique:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

Vous pouvez le faire avec des objets dynamiques:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

Utilisez la liste de tableaux qui est en fait un tableau d'implémentation. Il prend initialement un tableau de taille 4 et lorsqu'il est plein, un nouveau tableau est créé avec sa double taille et les données du premier tableau sont copiées dans le deuxième tableau, maintenant le nouvel élément est inséré dans un nouveau tableau. De plus, le nom du second tableau crée un alias de first afin qu'il soit accessible sous le même nom que le précédent et que le premier tableau soit supprimé


1

vous pouvez utiliser un objet arraylist de la classe collections

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

lorsque vous souhaitez ajouter un élément, vous pouvez utiliser

arr.add();

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.