Як можна надрукувати вміст масиву горизонтально?


77

Чому вікно консолі не друкує вміст масиву горизонтально, а не вертикально?

Чи є спосіб це змінити?

Як я можу відображати вміст свого масиву горизонтально, а не вертикально, за допомогою 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]);
}

Подивіться на цей , а також: stackoverflow.com/questions/18033938 / ...
NeverHopeless

Відповіді:


131

Ви, мабуть, використовуєте 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());
}

або string.Join<T>(у .NET Framework 4 або новішої версії):

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

5
Останній приклад працює лише для масивів рядків, чи не так?
Нікола Мусатті

@NicolaMusatti: Останній приклад дзвінків String.Join<T>. Цей метод було запроваджено лише у .NET Framework 4.
Dirk Vollmar

Добренько. Я спробував це на Ideone, але вони використовують версію Mono, яка, схоже, не підтримує її.
Нікола Мусатті

у відповідь Ніколі. будь-який об'єкт, який реалізує або замінює ToString (), може виводити його вміст для налагодження, як вважає за потрібне. зручна функція.
JJ_Coder4Hire

30

Я б запропонував:

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() + " ");

Поки ваші елементи не мають розривів рядків, вийде один рядок.

... або, як сказав Джон Скіт, надайте трохи більше контексту вашому питанню.


5

Якщо вам потрібно гарненько надрукувати масив масивів, може спрацювати щось подібне: Pretty Print Array of Arrays in .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]]


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

Пояснення буде в порядку.
Пітер Мортенсен

2

Наведене нижче рішення є найпростішим:

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



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

Пояснення буде в порядку.
Пітер Мортенсен

0

Використання Console.Write працює лише в тому випадку, якщо потік є єдиним потоком, що записується на консоль, інакше ваш вивід може бути впереміш з іншим результатом, який може вставляти або не вводити нові рядки, а також інші небажані символи. Щоб ваш масив був надрукований неушкодженим, використовуйте Console.WriteLine, щоб написати один рядок. Більшість будь-яких масивів об'єктів можна друкувати горизонтально (залежно від методу 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
Ця відповідь має все спільне з розглянутим питанням. Це однорядкове, сумісне із .NET 3.5 рішення проблеми за допомогою LINQ та не-загального методу string.Join, який також захищає від переривання виводу з інших потоків. Якщо ви відчуваєте моє формулювання, що робить відповідь важкою для багатопотокової теми, тоді редагування було б набагато кориснішим, ніж оголошення унікального та дійсного рішення як нерелевантне та голосування за нього. Голосуйте проти, якщо вважаєте, що потрібно, але чи голосували ви проти відповідей за допомогою Console.Write, коли OP чітко запитав "... with Console.WriteLine ()?"
G DeMasters

0

Я написав деякі розширення, щоб задовольнити майже будь-які потреби.
Існують перевантаження розширень для подачі за допомогою Separator , String.Format та IFormatProvider .

Приклад:

var array1 = new byte[] { 50, 51, 52, 53 };
var array2 = new double[] { 1.1111, 2.2222, 3.3333 };
var culture = CultureInfo.GetCultureInfo("ja-JP");

Console.WriteLine("Byte Array");
//Normal print 
Console.WriteLine(array1.StringJoin());
//Format to hex values
Console.WriteLine(array1.StringJoin("-", "0x{0:X2}"));
//Comma separated 
Console.WriteLine(array1.StringJoin(", "));
Console.WriteLine();

Console.WriteLine("Double Array");
//Normal print 
Console.WriteLine(array2.StringJoin());
//Format to Japanese culture
Console.WriteLine(array2.StringJoin(culture));
//Format to three decimals 
Console.WriteLine(array2.StringJoin(" ", "{0:F3}"));
//Format to Japanese culture and two decimals
Console.WriteLine(array2.StringJoin(" ", "{0:F2}", culture));
Console.WriteLine();

Console.ReadLine();

Розширення:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Extensions
{
    /// <summary>
    /// IEnumerable Utilities. 
    /// </summary>
    public static partial class IEnumerableUtilities
    {
        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StringJoin<T>(this IEnumerable<T> Source)
        {
            return Source.StringJoin(" ", string.Empty, null);
        }

        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StrinJoin<T>(this IEnumerable<T> Source, string Separator)
        {
            return Source.StringJoin(Separator, string.Empty, null);
        }

        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StringJoin<T>(this IEnumerable<T> Source, string Separator, string StringFormat)
        {
            return Source.StringJoin(Separator, StringFormat, null);
        }

        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StringJoin<T>(this IEnumerable<T> Source, string Separator, IFormatProvider FormatProvider)
        {
            return Source.StringJoin(Separator, string.Empty, FormatProvider);
        }

        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StringJoin<T>(this IEnumerable<T> Source, IFormatProvider FormatProvider)
        {
            return Source.StringJoin(" ", string.Empty, FormatProvider);
        }

        /// <summary>
        /// String.Join collection of items using custom Separator, String.Format and FormatProvider. 
        /// </summary>
        public static string StringJoin<T>(this IEnumerable<T> Source, string Separator, string StringFormat, IFormatProvider FormatProvider)
        {
            //Validate Source
            if (Source == null)
                return string.Empty;
            else if (Source.Count() == 0)
                return string.Empty;

            //Validate Separator
            if (String.IsNullOrEmpty(Separator))
                Separator = " ";

            //Validate StringFormat
            if (String.IsNullOrWhitespace(StringFormat))
                StringFormat = "{0}";

            //Validate FormatProvider 
            if (FormatProvider == null)
                FormatProvider = CultureInfo.CurrentCulture;

            //Convert items 
            var convertedItems = Source.Select(i => String.Format(FormatProvider, StringFormat, i));

            //Return 
            return String.Join(Separator, convertedItems);
        }
    }
}

-3
private int[,] MirrorH(int[,] matrix)               //the method will return mirror horizintal of matrix
{
    int[,] MirrorHorizintal = new int[4, 4];
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j ++)
        {
            MirrorHorizintal[i, j] = matrix[i, 3 - j];
        }
    }
    return MirrorHorizintal;
}

Пояснення буде в порядку.
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.