131 votes

Impression de tout le contenu d'un tableau en C#

J'essaye d'imprimer le contenu d'un tableau après avoir invoqué certaines méthodes qui le modifient, en Java j'utilise :

System.out.print(Arrays.toString(alg.id));

Comment puis-je faire cela en C# ?

244voto

Hossein Narimani Rad Points 6730

Vous pouvez essayer ceci :

foreach(var item in yourArray)
{
    Console.WriteLine(item.ToString());
}

Vous pouvez aussi essayer quelque chose comme ça :

yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));

EDIT : pour obtenir la sortie en une seule ligne [d'après votre commentaire] :

 Console.WriteLine("[{0}]", string.Join(", ", yourArray));
 //output style:  [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]

EDIT(2019) : Comme il est mentionné dans d'autres réponses, il est préférable d'utiliser Array.ForEach<T> et il n'est pas nécessaire de faire la méthode ToList étape.

Array.ForEach(yourArray, Console.WriteLine);

75voto

Matt Greer Points 29401

Il y a plusieurs façons de le faire, les autres réponses sont bonnes, voici une alternative :

Console.WriteLine(string.Join("\n", myArrayOfObjects));

22voto

Nai Points 11

La plus simple, par exemple, si vous avez un tableau de chaînes de caractères déclaré comme suit : string[] myStringArray = new string[] ;

Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));

22voto

TJ Wolschon Points 1003

J'ai décidé de tester les vitesses des différentes méthodes affichées ici :

Voici les quatre méthodes que j'ai utilisées.

static void Print1(string[] toPrint)
{
    foreach(string s in toPrint)
    {
        Console.Write(s);
    }
}

static void Print2(string[] toPrint)
{
    toPrint.ToList().ForEach(Console.Write);
}

static void Print3(string[] toPrint)
{
    Console.WriteLine(string.Join("", toPrint));
}

static void Print4(string[] toPrint)
{
    Array.ForEach(toPrint, Console.Write);
}

Les résultats sont les suivants :

 Strings per trial: 10000
 Number of Trials: 100
 Total Time Taken to complete: 00:01:20.5004836
 Print1 Average: 484.37ms
 Print2 Average: 246.29ms
 Print3 Average: 70.57ms
 Print4 Average: 233.81ms

Ainsi, Print3 est le plus rapide, car il n'y a qu'un seul appel à la fonction Console.WriteLine qui semble être le principal goulot d'étranglement pour la vitesse d'impression d'un tableau. Print4 est légèrement plus rapide que Print2 et Print1 est la plus lente de toutes.

Je pense que Print4 est probablement le plus polyvalent des 4 que j'ai testés, même si Print3 est plus rapide.

Si j'ai fait des erreurs, n'hésitez pas à me le faire savoir / à les corriger par vous-même !

EDIT : J'ajoute le IL généré ci-dessous

g__Print10_0://Print1
IL_0000:  ldarg.0     
IL_0001:  stloc.0     
IL_0002:  ldc.i4.0    
IL_0003:  stloc.1     
IL_0004:  br.s        IL_0012
IL_0006:  ldloc.0     
IL_0007:  ldloc.1     
IL_0008:  ldelem.ref  
IL_0009:  call        System.Console.Write
IL_000E:  ldloc.1     
IL_000F:  ldc.i4.1    
IL_0010:  add         
IL_0011:  stloc.1     
IL_0012:  ldloc.1     
IL_0013:  ldloc.0     
IL_0014:  ldlen       
IL_0015:  conv.i4     
IL_0016:  blt.s       IL_0006
IL_0018:  ret         

g__Print20_1://Print2
IL_0000:  ldarg.0     
IL_0001:  call        System.Linq.Enumerable.ToList<String>
IL_0006:  ldnull      
IL_0007:  ldftn       System.Console.Write
IL_000D:  newobj      System.Action<System.String>..ctor
IL_0012:  callvirt    System.Collections.Generic.List<System.String>.ForEach
IL_0017:  ret         

g__Print30_2://Print3
IL_0000:  ldstr       ""
IL_0005:  ldarg.0     
IL_0006:  call        System.String.Join
IL_000B:  call        System.Console.WriteLine
IL_0010:  ret         

g__Print40_3://Print4
IL_0000:  ldarg.0     
IL_0001:  ldnull      
IL_0002:  ldftn       System.Console.Write
IL_0008:  newobj      System.Action<System.String>..ctor
IL_000D:  call        System.Array.ForEach<String>
IL_0012:  ret

9voto

fubo Points 647

Une autre approche avec le Array.ForEach<T> Method (T[], Action<T>) de la méthode Array classe

Array.ForEach(myArray, Console.WriteLine);

Cela ne prend qu'une seule itération par rapport à array.ToList().ForEach(Console.WriteLine) qui prend deux itérations et crée en interne un second tableau pour le fichier List (double temps d'exécution des itérations et double consommation de mémoire)

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