650 votes

Ajouter des valeurs à un tableau C#

Il s'agit probablement d'un cas très simple : je débute en C# et j'ai besoin d'ajouter 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;
}

11 votes

Ne devrait-on pas remplacer "terms[] = value ;" par "terms[] = runs ;"?

0 votes

En C#, vous ne pouvez pas modifier la taille du tableau une fois qu'il est créé. Si vous voulez quelque chose qui ressemble à un tableau mais que vous puissiez ajouter/supprimer des éléments, utilisez List<int>().

0 votes

@KamranBigdely pas si vrai, vous pouvez utiliser un tableau comme IList<> et réassigner la valeur avec LinQ (en utilisant System.Linq) : terms= terms.Append(21).ToArray() ;

974voto

Tamas Czinege Points 49277

Vous pouvez le faire de cette façon -

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

Vous pouvez également utiliser des listes. L'avantage des listes est que vous n'avez pas besoin de connaître la taille du tableau lors de l'instanciation de la liste.

List<int> termsList = new List<int>();
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();

Edita: a) pour les boucles sur List<T> sont un peu plus de 2 fois moins chères que foreach boucles sur List<T>, b) le bouclage sur un tableau est environ 2 fois moins cher que le bouclage sur List<T>, c) le bouclage sur un tableau à l'aide de pour est 5 fois moins cher que de boucler sur List<T> en utilisant foreach (ce que la plupart d'entre nous font).

2 votes

Quel est l'avantage d'utiliser une liste dans ce scénario ?

16 votes

@PhillHealey Il n'est pas nécessaire de "savoir" quelle sera la taille du tableau avant de le créer. Comme vous pouvez le voir, dans ces exemples, OP doit mettre une valeur dans "new int[400]". - mais avec la liste, il n'a pas à le faire.

0 votes

Il faut être prudent ici car une liste ne fait qu'une expansion de tableau dynamique sous le manteau, il serait bon de connaître au moins la capacité.

97voto

David Mitchell Points 1742

Si vous écrivez en C# 3, vous pouvez le faire en 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é dynamiquement, comme il semble que ce soit le cas pour PHP (je ne l'ai jamais vraiment appris), alors vous pouvez vouloir utiliser une liste au lieu d'un int[]. Voici ce que que Le code serait le suivant :

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

Notez, cependant, que vous ne pouvez pas simplement ajouter un 401e élément en donnant à terms[400] une valeur. Vous devez plutôt appeler Add(), comme ceci :

terms.Add(1337);

43voto

FlySwat Points 61945

Des réponses sur la façon de le faire en utilisant un tableau sont fournies ici.

Cependant, le C# dispose d'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, le C# possède une collection appelée List qui fonctionne de manière très similaire au tableau PHP.

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

1 votes

Pour récupérer un élément de liste : int a = list[i] ;

1 votes

Ce n'est pas une réponse à la question posée. Le PO a clairement demandé des tableaux, pas des listes.

10voto

Motti Points 32921

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;
}

7voto

JB King Points 10105
int ArraySize = 400;

int[] terms = new int[ArraySize];

for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

C'est comme ça que je l'aurais codé.

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