Перебор многомерного jagged массива

158
26 января 2020, 12:30

Ребят, решил после js изучать С#, сразу возникли сложности. Необходимо перебрать двухмерный массив.

int[,] originalArray = new int[10, 10];
//filling array
for (int i = 0; i < originalArray.GetLength(0); i++)
{
    for (int y = 0; y < originalArray.GetLength(i); y++)
    {
        Console.WriteLine(originalArray[i, y]);
    }
}

на первой итерации мы узнаем количество строк. во второй цикл передается непосредственно итая строка, длину которой я например могу не знать, каким образом ее определить? если например массивы будут разные, а не как в этом примере. В данном случае получается исключение, что индекс выходит за границы. Безусловно, можно было бы вынести эти значения в переменные, которые определяются выше, но хотелось именно так это реализовать. Спасибо.

Answer 1

c разным количеством элементов во вложенных массивах

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int[][] arr = new int[3][];
            arr[0] = new int[5] { 1, 3, 5, 7, 9 };
            arr[1] = new int[4] { 2, 4, 6, 8 };
            arr[2] = new int[3] { 12, 34, 46 };
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write("Element({0}): ", i);
                for (int j = 0; j < arr[i].Length; j++)
                {
                    Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
                }
                System.Console.WriteLine();            
            }
        }
    }
}
// тоже самое через foreach
foreach(var item in arr)
{
     foreach(var element in item)
     {
         Console.Write(element.ToString() + " ");
     }
     Console.WriteLine();
 }

//`len` - длинна (можно сделать чтобы вводить) ну и далее два раза обход 
//1 - заполнение 
//2 - вывод

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            const int len = 5;
            Random r = new Random();
            int[,] originalArray = new int[len, len];
            for (int i = 0 ; i < originalArray.GetLength(0); i++)
            {
                for (int j = 0 ; j < originalArray.GetLength(1); j++)
                {
                    originalArray[i,j] = r.Next(0,100);
                }
            }

            for (int i = 0 ; i < originalArray.GetLength(0); i++)
            {
                for (int j = 0 ; j < originalArray.GetLength(1); j++)
                {
                    Console.Write(originalArray[i,j].ToString() + " ");
                }
                Console.WriteLine("");
            }
        }
    }
}
READ ALSO
Отсутствие класса OpenFileDialog в библиотеке Microsoft.Win32

Отсутствие класса OpenFileDialog в библиотеке Microsoft.Win32

У меня в решении два проектаВ главном проекте я могу обратиться к классу следующим образом:Microsoft

163
В чем разница в массивах IEnumerable&lt;T&gt; и List&lt;T&gt;?

В чем разница в массивах IEnumerable<T> и List<T>?

Возможно вопрос не совсем корректныйДопустим у нас имеется следующий код:

145
Транзакции в Postgresql на C# при помощи Npgsql

Транзакции в Postgresql на C# при помощи Npgsql

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

151
Telegram bot .net с использованием webhook постоянно шлет update

Telegram bot .net с использованием webhook постоянно шлет update

Начал писать Телеграм-бот с использованием webhook и столкнулся с проблемой - при вводе тестовой команды, Telegram постоянно шлет update, даже если не ввожу...

153