В моем коде я использую двумерный многомерный массив для представления сетки (не всегда равных размеров, например 10x15 или 21x7). После прочтения о том, как массивы с зазубринами работают быстрее и, как правило, рассматриваются лучше, я решил изменить свой 2D-массив на неровный массив.Изменение 2D-массива на неровный массив
Это, как я объявил многомерный массив:
int[,] array = new int[10, 10];
Я пытаюсь выяснить, как объявить, а затем инициализирует то же самое, но с использованием неровных массивов.
Редактировать Этот код находится внутри класса, и в конструкторе у меня уже есть:
class ProceduralGrid
{
private int[][] grid;
private int _columns;
private int _rows;
public ProceduralGrid(int rows, int columns)
{
_rows = rows; //For getters
_columns = columns;
//Create 2D grid
int x, y;
grid = new int[rows][];
for (x = 0; x < grid.Length; x++)
{
grid[x] = new int[10];
}
}
public int GetXY(int rows, int columns)
{
if (rows >= grid.GetUpperBound(0) + 1)
{
throw new ArgumentException("Passed X value (" + rows.ToString() +
") was greater than grid rows (" + grid.GetUpperBound(0).ToString() + ").");
}
else
{
if (columns >= grid.GetUpperBound(1) + 1)
{
throw new ArgumentException("Passed Y value (" + columns.ToString() +
") was greater than grid columns (" + grid.GetUpperBound(1).ToString() + ").");
}
else
{
return grid[rows][columns];
}
}
}
}
И в другом методе я просто делаю:
Console.WriteLine(grid.GetXY(5, 5).ToString());
Сообщение об ошибке я м:
Unhandled Exception: System.IndexOutOfRangeException: Array does not have that m
any dimensions.
at System.Array.GetUpperBound(Int32 dimension)
at ProcGen.ProceduralGrid.GetXY(Int32 rows, Int32 columns) in C:\Users\Lloyd\
documents\visual studio 2010\Projects\ProcGen\ProcGen\ProceduralGrid.cs:line 115
at ProcGen.Program.Main(String[] args) in C:\Users\Lloyd\documents\visual stu
dio 2010\Projects\ProcGen\ProcGen\Program.cs:line 27
Что я делаю неправильно Как я должен это делать?
Не уверен, что делать с 'GetLength (0)', но вы можете просто использовать 'grid.Length'. – Codecat