我试着在调用一些改变数组的方法后打印出数组的内容,在Java中我使用:
System.out.print(Arrays.toString(alg.id));
我如何在c#中做到这一点?
发布于 2013-04-29 00:55:17
有很多方法可以做到这一点,其他的答案都很好,这里有一个替代方案:
Console.WriteLine(string.Join("\n", myArrayOfObjects));
发布于 2015-04-10 17:46:19
最简单的方法,例如,如果你有一个字符串数组,声明如下: string[] myStringArray =string[] string[];
Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));
发布于 2018-05-16 21:39:48
我决定测试这里发布的不同方法的速度:
这是我使用的四种方法。
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);
}
结果如下:
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
所以Print3是最快的,因为它只有一次对Console.WriteLine
的调用,这似乎是打印出数组速度的主要瓶颈。Print4比Print2稍微快一点,而Print1是其中最慢的。
尽管Print3速度更快,但我认为Print4可能是我测试的4个中功能最多的。
如果我犯了任何错误,请随时让我知道/自己修复它们!
编辑:我将在下面添加生成的IL
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
https://stackoverflow.com/questions/16265247
复制相似问题