Подтвердить что ты не робот

Являются ли атрибуты x, y и row, col двухмерного массива назад?

если я думаю о координатной плоскости x, y x, y является общим обозначением для упорядоченной пары, но если я использую массив с двумя значениями, у меня есть myArray [row] [col], а строка - y и col является x. Является ли это назад или я просто думаю об этом неправильно? Я думал, что это будет выглядеть как myArray [x] [y], но это неправильно, если мне нужны реальные строки и столбцы (например, в игровой доске). Разве это не будет myArray [y] [x], чтобы действительно имитировать колонку столбцов строк

4b9b3361

Ответ 1

У вас все в порядке, и он чувствует себя немного в обратном направлении. номер строки является координатой y, а номер столбца является координатой x, и все же мы обычно пишем строку, col, но мы также обычно пишем x, y.

Если вы хотите написать свой массив, поскольку [y] [x] зависит или [x] [y] зависит в основном от того, насколько вы действительно заботитесь о макете в памяти (а если да, то какой язык вы используете). и хотите ли вы писать функции/методы, которые могут работать в строках или столбцах изолированно.

Если вы пишете код C/С++, массивы хранятся в Строчном порядке, что означает, что одна строка данных может обрабатываться как 1 мерный массив. Но один столбец данных не может. Если я правильно помню, VB использует стандартный порядок столбцов, поэтому языки меняются. Я был бы удивлен тем, что С# не является также строгим порядком, но я не знаю.

Ответ 2

Неважно, как вы храните свои данные в массиве ([x] [y] или [y] [x]). Важно то, что вы всегда смещаете массив по массиву. Двухмерный массив java - это, по сути, одномерный массив, хранящий второй массив (например, в случае [y] [x] у вас есть длинный массив из [y], в котором каждый y содержит соответствующие [x] массивы для этого строка y).

Чтобы эффективно запускать весь массив, важно получить доступ к данным таким образом, чтобы вам не приходилось выполнять поиск в этом массиве, переходя от одного y-массива-of-xarrays к другому y-массиву -Из-xarrays. То, что вы хотите сделать, - это получить доступ к одному элементу y и получить доступ ко всем x там, прежде чем переходить к следующему элементу y.

Итак, в ситуации Array [y] [x]. всегда имеют первую переменную во внешнем цикле, а вторую во внутреннем цикле:

for (int ys = 0; ys < Array[y].length; ys++)
    for (int xs = 0; xs < Array[y][x].length; xs++)
    {
        do  your stuff here
    }

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

Ответ 3

Собственно, это вам. В вашем вопросе нет права думать. Например, я обычно рассматриваю одномерный массив как строку ячейки. Поэтому, на мой взгляд, это массив [col] [row]. Но это действительно зависит от вас...

Ответ 4

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

Если это строго в вашем собственном коде, сделайте все, что вам будет удобно. Мое личное предпочтение было бы использовать myArray [y] [x]. Если они велики, могут быть преимущества производительности, связанные с тем, что элементы, к которым вы собираетесь получить доступ одновременно, вместе. Но я бы не стал беспокоиться об этом, пока на очень поздней стадии, если вообще.

Ответ 5

Ну, действительно, если вы думаете о строке как о элементах по оси x, а затем 2d-массив представляет собой группу элементов строки на оси y, то это нормально использовать y для работы в строке, поскольку вы уже знайте x (для этой конкретной строки x всегда одна и та же, она меняется со своими индексами), а затем используйте x для работы с несколькими элементами ряда (строки располагаются вертикально, каждый из которых имеет определенное значение y)

Ответ 6

Вот что я делаю для собственного здравомыслия:

int x = array[0].length;
int y = array.length;

И затем для каждого отдельного вызова массива я пишу:

array[y][x]

Это особенно полезно для графических алгоритмов и переворачивания матрицы по горизонтали/вертикали.