用C#打印数组的所有内容

Pad*_*ham 62 .net c# linq arrays

我试图在调用一些改变它的方法后打印出数组的内容,在Java中我使用:

System.out.print(Arrays.toString(alg.id));
Run Code Online (Sandbox Code Playgroud)

我怎么在c#中这样做?

Hos*_*Rad 123

你可以试试这个:

foreach(var item in yourArray)
{
    Console.WriteLine(item.ToString());
}
Run Code Online (Sandbox Code Playgroud)

您也可以尝试这样的事情:

yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));
Run Code Online (Sandbox Code Playgroud)

编辑:或者在评论中建议:

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

编辑:根据您的评论获得一行输出:

Array.ForEach(yourArray, Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,无需将我的答案复制并粘贴到您的答案中 (3认同)
  • 请注意,.ToString不是必需的,因为WriteLine具有各种重载,包括带有Object的回退. (2认同)

Mat*_*eer 41

有很多方法可以做到,其他答案都很好,这里有一个替代方案:

Console.WriteLine(string.Join("\n", myArrayOfObjects));
Run Code Online (Sandbox Code Playgroud)


小智 11

最简单的例如,如果你有一个字符串数组声明像这个字符串[] myStringArray = new string [];

Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));
Run Code Online (Sandbox Code Playgroud)


TJ *_*hon 8

由于工作中有一些停机时间,我决定测试此处发布的各种方法的速度。

这是我使用的四种方法。

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);
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

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   
Run Code Online (Sandbox Code Playgroud)


Joh*_*nny 7

C# 6.0开始,引入$ - 字符串插值时,多了一种方式:

var array = new[] { "A", "B", "C" };
Console.WriteLine($"{string.Join(", ", array)}");

//output
A, B, C
Run Code Online (Sandbox Code Playgroud)

连接可以使用 进行存档System.Linq,将 转换string[]char[]并打印为string

var array = new[] { "A", "B", "C" };
Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}");

//output
ABC
Run Code Online (Sandbox Code Playgroud)


fub*_*ubo 6

Array.ForEach<T> Method (T[],?Action<T>)方法的另一种方法Array

Array.ForEach(myArray, Console.WriteLine);
Run Code Online (Sandbox Code Playgroud)

相较于array.ToList().ForEach(Console.WriteLine)进行两次迭代并在内部为List(双迭代运行时和双内存消耗)创建第二个数组,这仅需一次迭代