web-dev-qa-db-fra.com

Ajout de valeurs à un tableau C #

Probablement très simple, je commence avec C # et je dois 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;
}
456
Ross

Vous pouvez faire de cette façon -

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

Vous pouvez également utiliser les listes. L’avantage des listes est qu’il n’est pas nécessaire 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();

Modifier: a) pour les boucles de la liste <T > sont un peu plus de 2 fois moins chers que pour chaque boucle sur la liste <T>, b) La mise en boucle sur un tableau est environ 2 fois moins chère que la boucle sur la liste <T>, c) boucler sur un tableau en utilisant pour est 5 fois moins cher que de boucler en mode Liste <T> en utilisant foreach (comme la plupart d’entre nous).

752
Tamas Czinege

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'autre part, 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 voudrez peut-être utiliser une liste. au lieu d'un int []. Voici à quoi ressemblerait le code que:

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

Notez cependant que vous ne pouvez pas simplement ajouter un 401ème élément en définissant les termes [400] à une valeur. Vous devriez plutôt appeler Add (), comme ceci:

terms.Add(1337);
85
David Mitchell

Utiliser la méthode de LinqConcat rend cela simple

int[] array = new int[] { 3, 4 };

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

résultat 3,4,2

49
Yitzhak Weinberg

Des réponses sur la façon de le faire à l'aide d'un tableau sont fournies ici.

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

Les collections sont de fantastiques alternatives à 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 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);
}
38
FlySwat

Utiliser une liste en tant qu'intermédiaire est le moyen le plus simple, comme d'autres l'ont décrit, mais étant donné que votre entrée est un tableau et que vous ne souhaitez pas simplement conserver les données dans une liste, je suppose que vous êtes peut-être préoccupé par les 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 voulez simplement ajouter un élément à la fin de la liste:

public static T[] Add<T>(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 aussi poster du 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.

11
Thracx

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

public static T[] Add<T>(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’ajouter plus d’un élément au tableau ou simplement de passer un tableau en tant que paramètre pour joindre deux tableaux.

10
Mark

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;
}
8
Motti
int ArraySize = 400;

int[] terms = new int[ArraySize];


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

    terms[runs] = runs;

}

Ce serait comme ça que je coderais.

5
JB King

Les tableaux C # ont une longueur fixe et sont toujours indexés. Choisissez 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 objets. Si vous voulez un tableau de taille dynamique, utilisez un List <int>.

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

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

4
Jimmy
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 en indice 0: 400
Valeur dans l'index 1: 400
Valeur dans l'index 2: 400
Valeur dans l'index 3: 400
Valeur de l'indice 4: 400
Valeur de l'indice 5: 400
Valeur de l'indice 6: 400
Valeur dans l'index 7: 400
Valeur dans l'index 8: 400
Valeur dans l'indice 9: 400
* /

2
jhyap

Juste une approche différente:

int runs = 0; 
bool batting = true; 
string scorecard;

while (batting = runs < 400)
    scorecard += "!" + runs++;

return scorecard.Split("!");
2
Ali Humayun

Vous ne pouvez pas simplement ajouter un élément à un tableau facilement. Vous pouvez définir l'élément à une position donnée comme fallen888 indiqué, mais je vous recommande d'utiliser plutôt un List<int> ou un Collection<int> et d'utiliser ToArray() si vous en avez besoin. il converti en un tableau.

2
Michael Stum

Si vous avez vraiment besoin d'un tableau, voici la solution la plus simple:

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

int [] terms = list.ToArray();
1
Steve

Si vous ne connaissez pas la taille du tableau ou si vous avez déjà ajouté un tableau. Vous pouvez vous y prendre de deux manières. La première consiste à utiliser un List<T> générique: vous devrez pour cela convertir le tableau en une var termsList = terms.ToList(); et utiliser la méthode Add. Ensuite, utilisez la méthode var terms = termsList.ToArray(); pour reconvertir en tableau.

var terms = default(int[]);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

La seconde façon est de redimensionner le tableau actuel:

var terms = default(int[]);

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

    terms[terms.Length - 1] = i;
}

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

Ces deux éléments vous permettront de le faire de manière dynamique. Si vous allez ajouter beaucoup d'éléments, utilisez simplement un List<T>. S'il ne s'agit que de quelques éléments, les performances seront redimensionnées en redimensionnant le tableau. En effet, vous prenez plus de temps pour créer l'objet List<T>.

Times en ticks:

éléments

Durée de redimensionnement du tableau: 6

List Add Time: 16

400 articles

Durée de redimensionnement du tableau: 305

List Add Time: 20

1
LCarter
         static void Main(string[] 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.*/
        }
0
user3404904
int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}
0
Johnno Nolan
            /*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;
            }
0
user3404904

Je vais ajouter ceci pour une autre variante. Je préfère ce type de lignes de codage fonctionnel.

Enumerable.Range(0, 400).Select(x => x).ToArray();
0
David