Я подозреваю, что этот вопрос является дубликатом существующего, но я не могу найти соответствующий прецедент. Поэтому, возможно, нам нужен ответ, объясняющий, как форматировать двумерный массив для вывода. Это такой ответ. :)
Первое, что нужно иметь в виду, состоит в том, что тот факт, что вы показываете это с помощью MessageBox
, едва ли имеет значение. Что вы такое действительно спрашиваете, как отформатировать двумерный массив в виде строки, где эта строка включает в себя разрывы строк между строками в ваших данных, а столбцы выстроились в очередь. После того, как у вас есть эта строка, вы можете отображать в любом контексте, который использует шрифт с фиксированным пространством (на самом деле это неMessageBox
& hellip; но нетрудно создать свой собственный Form
для использования в качестве окна сообщения, где вы можете укажите шрифт, используемый для отображения текста), и выведите вывод, как вы, кажется, просите.
Например, вот консольная программа, которая делает то, что вы хотите:
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
Random random = new Random();
int[,] array = new int[10, 2];
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array[i, j] = random.Next(10);
if (j > 0)
{
sb.Append(", ");
}
sb.Append(array[i, j]);
}
sb.AppendLine();
}
Console.WriteLine(sb);
}
Обратите внимание, что я закрепил инициализацию массива и форматирование значений в единый кусок кода. Я также использовал вложенные петли for
для индексации каждого отдельного элемента в массиве; это позволяет использовать две вещи:
- Для инициализации массива с использованием циклов вместо явного выписывания каждого элемента, как в вашем примере.
- Чтобы упростить распознавание конца строки в массиве, чтобы на выход можно было добавить разрыв строки.
В вашем примере ваши случайные числа - только одна цифра. Но если вам нужно было форматировать числа, которые могли бы различаться по количеству цифр, вы хотели бы вывести вывод с пробелами для более коротких чисел, чтобы номера в столбцах вашего вывода выстроились в линию. Вы можете сделать это путем добавления ширины спецификатор к выходу, как это:
sb.AppendFormat("{0,2}", array[i, j]);
В приведенном выше, вместо того чтобы использовать форматирование по умолчанию, как и предыдущий пример кода, я явно указать формат (и вызова AppendFormat()
вместо Append()
, чтобы сделать это), и в этом явном формате я включил текст ,2
, чтобы указать, что я хочу, чтобы строка вывода имела минимальную ширину в два символа. В этом случае метод добавит пробелы, чтобы это обеспечить.
Я также изменил с простой конкатенации строк на использование StringBuilder
. В вашем исходном примере конкатенация строк, вероятно, не ужасна, но это также не очень хорошая привычка. Когда вы повторно добавляете текст в цикле, вы всегда должны использовать StringBuilder
. В противном случае может быть создано слишком много объектов, а также может быть потрачено слишком много времени на копирование символьных данных. Использование StringBuilder
позволяет конкатенировать текст более эффективно.
'MessageBox.Show (MSG,«Таблица»);' находится за пределами 'foreach' цикла и, таким образом, напечатанный' msg' всегда один из последней итерации. В C# вам нужно использовать фигурные скобки для большинства многострочных операторов, таких как 'foreach', то есть: чтобы увидеть все значения, вам нужно будет написать' foreach (int x in thing) {msg = msg + x + "\ n"; MessageBox.Show (msg, «Таблица»); } '. – varocarbas