Ajout de valeurs à un tableau C #

Probablement simple, je commence avec C # et je dois append des valeurs à un tableau, par exemple:

int[] terms; for(int runs = 0; runs < 400; runs++) { terms[] = runs; } 

Pour ceux qui ont utilisé PHP, voici ce que j’essaie de faire en C #:

 $arr = array(); for ($i = 0; $i < 10; $i++) { $arr[] = $i; } 

Vous pouvez faire comme ça –

 int[] terms = new int[400]; for (int runs = 0; runs < 400; runs++) { terms[runs] = value; } 

Vous pouvez également utiliser les listes - l'avantage étant que les listes sont, vous n'avez pas besoin de connaître la taille du tableau lors de l'instanciation de la liste.

 List termsList = new List(); for (int runs = 0; runs < 400; runs++) { termsList.Add(value); } // You can convert it back to an array if you would like to int[] terms = termsList.ToArray(); 

Edit: a) pour les boucles de List sont un peu plus chères que les boucles foreach de List , b) Looping on array est environ 2 fois moins cher que de boucler sur List , c) looping on l'utilisation de array for est 5 fois moins chère que la mise en boucle sur List à l'aide de foreach (ce que font la plupart d'entre nous).

Si vous écrivez en C # 3, vous pouvez le faire avec une seule ligne:

 int[] terms = Enumerable.Range(0, 400).ToArray(); 

Cet extrait de code suppose que vous avez une directive using pour System.Linq en haut de votre fichier.

D’un autre côté, si vous cherchez quelque chose qui peut être redimensionné dynamicment, comme cela semble être le cas pour PHP (je ne l’ai jamais réellement appris), vous pouvez utiliser une liste au lieu d’un int [] . Voici à quoi ressemblerait ce code:

 List terms = Enumerable.Range(0, 400).ToList(); 

Notez toutefois que vous ne pouvez pas simplement append un élément 401st en définissant des termes [400] sur une valeur. Vous devriez plutôt appeler Add (), comme ceci:

 terms.Add(1337); 

Les réponses à cette question sur l’utilisation d’un tableau sont fournies ici.

Cependant, C # a une chose très pratique appelée System.Collections 🙂

Les collections sont des alternatives fantaisistes à l’utilisation d’un tableau, bien que beaucoup d’entre elles utilisent un tableau en interne.

Par exemple, C # a une collection appelée List qui fonctionne très similaire au tableau PHP.

 using System.Collections.Generic; // Create a List, and it can only contain integers. List list = new List(); for (int i = 0; i < 400; i++) { list.Add(i); } 

Utiliser la méthode de Linq Concat rend cela simple

 int[] array = new int[] { 3, 4 }; array = array.Concat(new int[] { 2 }).ToArray(); 

résultat 3,4,2

Vous devez d’abord allouer le tableau:

 int [] terms = new int[400]; // allocate an array of 400 ints for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again { terms[runs] = value; } 

L’utilisation d’une liste comme intermédiaire est la méthode la plus simple, comme d’autres l’ont décrit, mais comme votre entrée est un tableau et que vous ne voulez pas simplement conserver les données dans une liste, je suppose que vous vous préoccupez des performances.

La méthode la plus efficace consiste probablement à allouer un nouveau tableau, puis à utiliser Array.Copy ou Array.CopyTo. Ce n’est pas difficile si vous souhaitez simplement append un élément à la fin de la liste:

 public static T[] Add(this T[] target, T item) { if (target == null) { //TODO: Return null or throw ArgumentNullException; } T[] result = new T[target.Length + 1]; target.CopyTo(result, 0); result[target.Length] = item; return result; } 

Je peux également poster un code pour une méthode d’extension Insert qui prend un index de destination en entrée, si vous le souhaitez. C’est un peu plus compliqué et utilise la méthode statique Array.Copy 1-2 fois.

Basé sur la réponse de Thracx (je n’ai pas assez de points pour répondre):

 public static T[] Add(this T[] target, params T[] items) { // Validate the parameters if (target == null) { target = new T[] { }; } if (items== null) { items = new T[] { }; } // Join the arrays T[] result = new T[target.Length + items.Length]; target.CopyTo(result, 0); items.CopyTo(result, target.Length); return result; } 

Cela permet d’append plus d’un élément au tableau, ou de simplement passer un tableau en tant que paramètre pour joindre deux tableaux.

 int ArraySize = 400; int[] terms = new int[ArraySize]; for(int runs = 0; runs < ArraySize; runs++) { terms[runs] = runs; } 

Ce serait comment je coderais.

Les tableaux C # sont de longueur fixe et toujours indexés. Aller avec la solution de Motti:

 int [] terms = new int[400]; for(int runs = 0; runs < 400; runs++) { terms[runs] = value; } 

Notez que ce tableau est un tableau dense, un bloc contigu de 400 octets où vous pouvez déposer des choses. Si vous voulez un tableau de taille dynamic, utilisez une liste .

 List terms = new List(); for(int runs = 0; runs < 400; runs ++) { terms.Add(runs); } 

Ni int [] ni List ne sont un tableau associatif - ce serait un Dictionary <> en C #. Les tableaux et les listes sont denses.

 int[] terms = new int[10]; //create 10 empty index in array terms //fill value = 400 for every index (run) in the array //terms.Length is the total length of the array, it is equal to 10 in this case for (int run = 0; run < terms.Length; run++) { terms[run] = 400; } //print value from each of the index for (int run = 0; run < terms.Length; run++) { Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]); } Console.ReadLine(); 

/*Sortie:

Valeur dans l'indice 0: 400
Valeur dans l'indice 1: 400
Valeur dans l'indice 2: 400
Valeur dans l'indice 3: 400
Valeur dans l'indice 4: 400
Valeur dans l'indice 5: 400
Valeur dans l'indice 6: 400
Valeur dans l'indice 7: 400
Valeur dans l'indice 8: 400
Valeur dans l'indice 9: 400
* /

Vous ne pouvez pas simplement append un élément à un tableau facilement. Vous pouvez définir l’élément à une position donnée, comme indiqué dans la section descend888 , mais je recommande d’utiliser plutôt une List ou une Collection et d’utiliser ToArray() si vous en avez besoin pour le convertir en tableau.

Si vous avez vraiment besoin d’un tableau, voici le plus simple:

 using System.Collections.Generic; // Create a List, and it can only contain integers. List list = new List(); for (int i = 0; i < 400; i++) { list.Add(i); } int [] terms = list.ToArray(); 

Si vous ne connaissez pas la taille du tableau ou si vous ajoutez déjà un tableau existant. Vous pouvez y aller de deux manières. Le premier utilise une List générique List : pour ce faire, vous devez convertir le tableau en var termsList = terms.ToList(); et utilisez la méthode Add. Ensuite, lorsque vous var terms = termsList.ToArray(); terminé, utilisez le var terms = termsList.ToArray(); méthode pour reconvertir en un tableau.

 var terms = default(int[]); var termsList = terms == null ? new List() : terms.ToList(); for(var i = 0; i < 400; i++) termsList.Add(i); terms = termsList.ToArray(); 

La deuxième façon est de redimensionner le tableau en cours:

 var terms = default(int[]); for(var i = 0; i < 400; i++) { if(terms == null) terms = new int[1]; else Array.Resize(ref terms, terms.Length + 1); terms[terms.Length - 1] = i; } 

Si vous utilisez .NET 3.5 Array.Add(...);

Les deux vous permettront de le faire dynamicment. Si vous ajoutez beaucoup d’éléments, utilisez simplement une List . Si ce n'est que quelques éléments, les performances de redimensionnement du tableau seront meilleures. Cela est dû au fait que vous créez plus d'un hit pour créer l'object List .

Temps en ticks:

3 articles

Temps de redimensionnement du tableau: 6

Liste Ajouter une heure: 16

400 articles

Temps de redimensionnement du tableau: 305

Liste Ajouter le temps: 20

Juste une approche différente:

 int runs = 0; bool batting = true; ssortingng scorecard; while (batting = runs < 400) scorecard += "!" + runs++; return scorecard.Split("!"); 
 int[] terms = new int[400]; for(int runs = 0; runs < 400; runs++) { terms[runs] = value; } 
  static void Main(ssortingng[] args) { int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/ int i, j; /*initialize elements of array arrayname*/ for (i = 0; i < 5; i++) { arrayname[i] = i + 100; } /*output each array element value*/ for (j = 0; j < 5; j++) { Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]); } Console.ReadKey();/*Obtains the next character or function key pressed by the user. The pressed key is displayed in the console window.*/ } 
  /*arrayname is an array of 5 integer*/ int[] arrayname = new int[5]; int i, j; /*initialize elements of array arrayname*/ for (i = 0; i < 5; i++) { arrayname[i] = i + 100; }