如何横向打印数组的内容?

80
为什么控制台窗口打印的数组内容是竖向而不是横向?是否有方法可以改变这种情况?如何使用 Console.WriteLine() 横向显示数组内容?例如:
int[] numbers = new int[100]
for(int i; i < 100; i++)
{
    numbers[i] = i;
}

for (int i; i < 100; i++)
{
    Console.WriteLine(numbers[i]);
}

也可以看看这个:https://dev59.com/-XXYa4cB1Zd3GeqP4EBo#18041923 - NeverHopeless
12个回答

137

你可能正在使用Console.WriteLine来打印数组。

int[] array = new int[] { 1, 2, 3 };
foreach(var item in array)
{
    Console.WriteLine(item.ToString());
}

如果您不想每个项目都单独显示在一行上,请使用Console.Write

int[] array = new int[] { 1, 2, 3 };
foreach(var item in array)
{
    Console.Write(item.ToString());
}

或者使用.NET Framework 4及更高版本中的string.Join<T>

int[] array = new int[] { 1, 2, 3 };
Console.WriteLine(string.Join(",", array));

5
最后一个例子只适用于字符串数组,是吗? - Nicola Musatti
@NicolaMusatti:最后一个例子调用了String.Join<T>。这个方法只在.NET Framework 4中引入。 - Dirk Vollmar
啊,好的。我在 Ideone 上尝试了一下,但他们使用的 Mono 版本似乎不支持它。 - Nicola Musatti
作为对Nicola的回应,任何实现或重写ToString()方法的对象都可以根据自己的需要输出其内容以进行调试。这是一个非常方便的功能。 - JJ_Coder4Hire

32

我建议:

foreach(var item in array)
  Console.Write("{0}", item);

与上文所述相同,只不过如果其中一个项目为null,它不会引发异常。

Console.Write(string.Join(" ", array));

如果数组是 string[] 类型,那就完美了。


19

只需遍历数组并使用Write而不是WriteLine将项目写入控制台:

foreach(var item in array)
    Console.Write(item.ToString() + " ");
只要您的项目没有任何换行符,那将产生单行文本。...或者,正如Jon Skeet所说,为您的问题提供更多上下文信息。

6
如果您需要将一个数组的数组进行漂亮的打印输出,可以使用以下方法:在.NET C#中漂亮地打印数组的数组
public string PrettyPrintArrayOfArrays(int[][] arrayOfArrays)
{
  if (arrayOfArrays == null)
    return "";

  var prettyArrays = new string[arrayOfArrays.Length];

  for (int i = 0; i < arrayOfArrays.Length; i++)
  {
    prettyArrays[i] = "[" + String.Join(",", arrayOfArrays[i]) + "]";
  }

  return "[" + String.Join(",", prettyArrays) + "]";
}

示例输出:

[[2,3]]

[[2,3],[5,4,3]]

[[2,3],[5,4,3],[8,9]]

5
以下解决方案是最简单的:

以下是具体步骤:

Console.WriteLine("[{0}]", string.Join(", ", array));

输出:[1, 2, 3, 4, 5] 另一个简短的解决方案:
Array.ForEach(array,  val => Console.Write("{0} ", val));

输出:1 2 3 4 5。或者如果需要添加,,请使用下面的代码:
int i = 0;
Array.ForEach(array,  val => Console.Write(i == array.Length -1) ? "{0}" : "{0}, ", val));

输出:1,2,3,4,5

3
foreach(var item in array)
Console.Write(item.ToString() + "\t");

3
namespace ReverseString
{
    class Program
    {
        static void Main(string[] args)
        {
            string stat = "This is an example of code" +
                          "This code has written in C#\n\n";

            Console.Write(stat);

            char[] myArrayofChar = stat.ToCharArray();

            Array.Reverse(myArrayofChar);

            foreach (char myNewChar in myArrayofChar)
                Console.Write(myNewChar); // You just need to write the function
                                          // Write instead of WriteLine
            Console.ReadKey();
        }
    }
}

这是输出结果:

#C ni nettirw sah edoc sihTedoc fo elpmaxe na si sihT

需要解释一下。 - Peter Mortensen

1
public static void Main(string[] args)
{
    int[] numbers = new int[10];

    Console.Write("index ");

    for (int i = 0; i < numbers.Length; i++)
    {
        numbers[i] = i;
        Console.Write(numbers[i] + " ");
    }

    Console.WriteLine("");
    Console.WriteLine("");
    Console.Write("value ");

    for (int i = 0; i < numbers.Length; i++)
    {
        numbers[i] = numbers.Length - i;
        Console.Write(numbers[i] + " ");
    }

    Console.ReadKey();
}

也许告诉原帖作者他做错了什么,以及你是如何修复的? - Marthijn
需要解释一下。 - Peter Mortensen

1
int[] n=new int[5];

for (int i = 0; i < 5; i++)
{
    n[i] = i + 100;
}

foreach (int j in n)
{
    int i = j - 100;

    Console.WriteLine("Element [{0}]={1}", i, j);
    i++;
}

需要解释一下。 - Peter Mortensen

0

仅使用Console.Write只适用于线程是唯一写入控制台的线程,否则您的输出可能与其他输出交织在一起,这些输出可能会插入换行符以及其他不需要的字符。为确保数组完整打印,请使用Console.WriteLine写入一个字符串。大多数对象数组可以使用非泛型Join(取决于类型的ToString()方法)水平打印,该方法在.NET 4.0之前可用:

        int[] numbers = new int[100];
        for(int i= 0; i < 100; i++)
        {
            numbers[i] = i;
        }

        //For clarity
        IEnumerable strings = numbers.Select<int, string>(j=>j.ToString());
        string[] stringArray = strings.ToArray<string>();
        string output = string.Join(", ", stringArray);
        Console.WriteLine(output);

        //OR 

        //For brevity
        Console.WriteLine(string.Join(", ", numbers.Select<int, string>(j => j.ToString()).ToArray<string>()));

1
这与手头的问题无关。OP甚至没有提到线程。 - MechMK1
1
这个答案与问题有关。它是一个使用LINQ和非泛型string.Join方法的.NET 3.5兼容解决方案,还可以防止其他线程中断输出的一行代码。如果您认为我的措辞使答案看起来过于重视多线程问题,那么编辑比声明唯一且有效的解决方案无关并将其投票否决更有帮助。如果您觉得必须要投票否决,请问您是否也会对那些使用Console.Write而不是OP明确要求的“...with a Console.WriteLine()”的答案进行投票否决呢? - G DeMasters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接