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

问题描述 投票:45回答:10

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

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

我怎么在c#中这样做?

c# .net arrays linq
10个回答
90
投票

你可以试试这个:

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

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

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

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

yourArray.ToList().ForEach(Console.WriteLine);

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

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

0
投票

从C#6.0开始,当引入$ - string插值时,还有一种方法:

System.Linq

连接可以使用string[]存档,将char[]转换为string并打印为var array = new[] { "A", "B", "C" }; Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}"); //output ABC

qazxswpoi

35
投票

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

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

7
投票

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

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

4
投票

由于工作中有一些停机时间,我决定测试这里发布的不同方法的速度。

这些是我使用的四种方法。

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是最慢的。

我认为Print4可能是我测试过的4中最通用的,尽管Print3更快。

如果我犯了任何错误,请随时告诉我/自己修复它们!

编辑:我在下面添加生成的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   

3
投票

在C#中,您可以循环遍历打印每个元素的阵列。请注意,System.Object定义了ToString()方法。从System.Object()派生的任何给定类型都可以覆盖它。

返回表示当前对象的字符串。

http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx

默认情况下,将打印对象的完整类型名称,但许多内置类型会覆盖该默认值以打印更有意义的结果。您可以在自己的对象中覆盖ToString()以提供有意义的输出。

foreach (var item in myArray)
{
    Console.WriteLine(item.ToString()); // Assumes a console application
}

如果你有自己的类Foo,你可以重写ToString(),如:

public class Foo
{
    public override string ToString()
    {
        return "This is a formatted specific for the class Foo.";
    }
}

2
投票

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

Array.ForEach(myArray, Console.WriteLine);

array.ToList().ForEach(Console.WriteLine)相比只需要一次迭代,List需要两次迭代并在内部为IEnumerable<object>创建第二个数组(双重迭代运行时和双内存消耗)


1
投票

如果你想变得可爱,你可以编写一个扩展方法,将IEnumerable<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); } } } 在T上是协变的:

class Utils
{
    static void dump<T>(IEnumerable<T> list, string glue="\n")
    {
        Console.WriteLine(string.Join(glue, list.Select(x => x.ToString())));
    }
}

(我认为你不会在测试代码中使用它。)


0
投票

我赞成了Matthew Watson的扩展方法答案,但如果你是从Python迁移/访问,你会发现这样的方法很有用:

Program.Main

- >这将使用提供的分隔符打印任何集合。这是非常有限的(嵌套集合?)。

对于一个脚本(即一个只包含Program.cs的C#控制台应用程序,大多数事情都发生在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(); } } } 中) - 这可能就好了。


0
投票

这是使用数组打印String的最简单方法!

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

//output
A, B, C
© www.soinside.com 2019 - 2024. All rights reserved.