J'essaie d'imprimer le contenu d'un tableau après avoir appelé certaines méthodes qui le modifient. En Java, j'utilise
System.out.print(Arrays.toString(alg.id));
comment puis-je faire cela en c #?
Vous pouvez essayer ceci:
foreach(var item in yourArray)
{
Console.WriteLine(item.ToString());
}
Aussi, vous voudrez peut-être essayer quelque chose comme ceci:
yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));
EDIT: Ou comme suggéré dans les commentaires:
yourArray.ToList().ForEach(Console.WriteLine);
EDIT: pour obtenir une sortie sur une ligne [en fonction de votre commentaire]:
Console.WriteLine("[{0}]", string.Join(", ", yourArray));
//output style: [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
Il y a plusieurs façons de le faire, les autres réponses sont bonnes, voici une alternative:
Console.WriteLine(string.Join("\n", myArrayOfObjects));
Le plus simple, par exemple si vous avez un tableau de chaînes déclaré comme ceci: [] myStringArray = new string [];
Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));
En C #, vous pouvez parcourir le tableau en imprimant chaque élément. Notez que System.Object définit une méthode ToString (). Tout type donné qui dérive de System.Object () peut le remplacer.
Retourne une chaîne qui représente l'objet actuel.
http://msdn.Microsoft.com/en-us/library/system.object.tostring.aspx
Par défaut, le nom de type complet de l'objet sera imprimé, bien que de nombreux types intégrés remplacent cette valeur par défaut pour imprimer un résultat plus significatif. Vous pouvez remplacer ToString () dans vos propres objets pour fournir une sortie significative.
foreach (var item in myArray)
{
Console.WriteLine(item.ToString()); // Assumes a console application
}
Si vous aviez votre propre classe Foo, vous pouvez remplacer ToString () comme ceci:
public class Foo
{
public override string ToString()
{
return "This is a formatted specific for the class Foo.";
}
}
En raison de certains temps d'arrêt au travail, j'ai décidé de tester les vitesses des différentes méthodes publiées ici.
Ce sont 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
Donc, Print3 est le plus rapide, car il n’ya qu’un appel au 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 le plus lent de tous.
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 commis des erreurs, n'hésitez pas à me le faire savoir/à les corriger vous-même!
EDIT: J'ajoute l'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
Une autre approche avec la méthode Array.ForEach<T> Method (T[], Action<T>)
de la classe Array
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 la List
(exécution à deux itérations et double consommation de mémoire)
Si vous voulez être mignon, vous pouvez écrire une méthode d’extension qui écrit une séquence IEnumerable<object>
sur la console. Cela fonctionnera avec des énumérables de tout type, parce que IEnumerable<T>
est covariant sur T:
using System;
using System.Collections.Generic;
namespace Demo
{
internal static class Program
{
private static void Main(string[] args)
{
string[] array = new []{"One", "Two", "Three", "Four"};
array.Print();
Console.WriteLine();
object[] objArray = new object[] {"One", 2, 3.3, TimeSpan.FromDays(4), '5', 6.6f, 7.7m};
objArray.Print();
}
}
public static class MyEnumerableExt
{
public static void Print(this IEnumerable<object> @this)
{
foreach (var obj in @this)
Console.WriteLine(obj);
}
}
}
(Je ne pense pas que vous utiliseriez ceci autrement que dans le code de test.)
J'ai voté pour la méthode d'extension answer par Matthew Watson, mais si vous migrez/visitez Python, vous pouvez trouver une telle méthode utile:
class Utils
{
static void dump<T>(IEnumerable<T> list, string glue="\n")
{
Console.WriteLine(string.Join(glue, list.Select(x => x.ToString())));
}
}
-> Ceci imprimera n'importe quelle collection en utilisant le séparateur fourni. C'est assez limité (collections imbriquées?).
Pour un script (c'est-à-dire une application console C # qui ne contient que Program.cs, et la plupart des choses se passent dans Program.Main
) - cela peut suffire.
c'est le moyen le plus simple d'imprimer la chaîne à l'aide d'un tableau !!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace arraypracticeforstring
{
class Program
{
static void Main(string[] args)
{
string[] arr = new string[3] { "Snehal", "Janki", "Thakkar" };
foreach (string item in arr)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
}
}
À partir de C # 6.0 , lorsque l’interpolation de chaîne $ - a été introduite, il existe un moyen supplémentaire:
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{string.Join(", ", array}");
//output
A, B, C
La concaténation peut être archivée à l'aide du System.Linq
, convertir le string[]
en char[]
et imprimer sous la forme string
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}");
//output
ABC