Как прочитать двумерный массив и записать его в консоль в виде матрицы - PullRequest
0 голосов
/ 17 июня 2020

Я хотел прочитать двумерный массив и записать его как матрицу в консоль. Мой код показан ниже

Для чтения массива

int[][] arr = new int[3][];
for(int i=0;i<3;i++)
{
    arr[i] = Array.ConvertAll(Console.ReadLine().Split(' '),aTemp => Convert.ToInt32(aTemp));
}

Для записи массива в качестве матрицы для консоли

for(int i=0;i<arr.GetLength(0);i++)
{
    for(int j=0;j<arr.GetLength(1);j++)
    {
         Console.WriteLine("\t" + arr[i][j]);
    }
}

Однако, когда я ввожу ввод в консоль и пытаюсь запустить, я получаю здесь исключение Index out of bound.

arr.GetLength(1);

Я затем попробовал инициализировать столбец, как это, и строкой, и столбцом "int [] [] arr = new int [3] [3];".

В это время появляется другая ошибка:

Недопустимый спецификатор ранга: ожидается ',' или ']'

Затем я попытался инициализировать массив как ниже

"int[,] arr = new int[3,3];"

Ошибка некорректного спецификатора ранга на этот раз исчезла, но ошибка появляется в строке чтения элементов массива,

, вероятно, эта ошибка может быть связана с тем, что arr[i][j] не используется и не читается каждый elements.

Я просто хочу знать, в чем была ошибка в моем исходном коде, что я не получаю значение GetLength (1). и В чем разница между int[,] arr = new int[3,3]; и int[][]arr = new int[3][3];

, а также есть ли какой-либо оптимизированный способ чтения двухмерного массива, такого как оператор, вместо использования 2 для циклов.

Надеюсь, вопрос ясен. Было бы здорово, если бы мне кто-нибудь помог с этой проблемой. Заранее спасибо !!!

1 Ответ

1 голос
/ 17 июня 2020

int[,] - это многомерный массив

int[][] - зубчатый массив , который представляет собой массив массивов. Неровный массив, описанный таким образом, не имеет ранга, и вызов GetLength(rank) вызовет ошибку, поскольку он имеет только одно техническое измерение для компилятора. Это всего лишь один массив, каждый элемент которого заполнен другим массивом.

Чтобы записать зубчатый 2-мерный массив в матрицу, вы можете воспользоваться string.Join

Объединяет элементы указанного массива или членов коллекции, используя указанный разделитель между каждым элементом или членом.

var arr = new [] {new []{1,2,3},new []{4,5,6},new []{7,8,9}};

for(int i = 0; i< arr.Length; i++)
    Console.WriteLine(string.Join(", ",arr[i] ));

Вывод

1, 2, 3
4, 5, 6
7, 8, 9

Или другой подход

for (var i = 0; i < arr.Length; i++)
{
   for (var j = 0; j < arr[i].Length; j++)
      Console.Write(arr[i][j] + " "); 
   Console.WriteLine();
}

или

foreach (var t in arr)
{
   foreach (var t1 in t)
      Console.Write(t1 + " ");
    Console.WriteLine();
}

или

var result = string.Join(Environment.NewLine, arr.Select(x => string.Join(", ", x)));
Console.WriteLine(result);

Для многомерных 2d-массивов вы можете затем вызвать GetLength(rank) чтобы получить длину этого конкретного измерения

var arr = new [,] {{1,2,3},{4,5,6},{7,8,9}};

for (var i = 0; i < arr.GetLength(0); i++)
{
   for (var j = 0; j < arr.GetLength(1); j++)
      Console.Write(arr[i, j]);
   Console.WriteLine();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...