Многомерный массив, судя по самому названию, представляет собой массив, содержащий более одного измерения. 2d и 3d массивы являются наиболее распространенными, которые вы можете найти. Двухмерные массивыдля таких языков, как Ruby и Javascript, будутмассивом массивов. Но следует отметить, что эти языки не поддерживают истинный смысл многомерных массивов. Разница заключается в его распределении памяти.

В истинном MDA все его элементы занимают непрерывный блок памяти, совсем как матрица со своими строками и столбцами.

Массив массивов (AoA) несколько иначе занимает память. A вместо того, чтобы занимать блок в памяти, будет содержать ссылку на его элементы, которые представляют собой массивы, содержащие ссылки на содержащиеся в них элементы.

2D-массивы

Двумерные массивы в Ruby представлены массивом одномерных массивов.

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

Эта структура данных удобна для программирования игр, требующих сетки, которые содержат строки (X) и столбцы (Y), такие как шахматы, судоку и т. д.

board = [[1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9],
         [1,2,3,4,5,6,7,8,9]]

Доступ к каждой из этих строк довольно прост. Мы можем просто пройтись по основному массиву, содержащему каждый из них. Но что, если нам нужно получить доступ к элементам на «оси Y»? (например: [1,1,1,1,1,1,1,1,1], [2,2,2,2,2,2,2,2,2] и т. д.)

К счастью, в Ruby есть специальный метод под названием transpose, который упрощает задачу.

output = board.transpose
output = [[1,1,1,1,1,1,1,1,1],
          [2,2,2,2,2,2,2,2,2],
          [3,3,3,3,3,3,3,3,3],
          [4,4,4,4,4,4,4,4,4],
          [5,5,5,5,5,5,5,5,5],
          [6,6,6,6,6,6,6,6,6],
          [7,7,7,7,7,7,7,7,7],
          [8,8,8,8,8,8,8,8,8]
          [9,9,9,9,9,9,9,9,9]]

Вот разбивка того, как работает метод транспонирования:

def my_transpose(board)
 new_matrix = []
 
 i = 0
 while i < board.size
   new_matrix[i] = []
   j = 0 
   while j < board.size
     new_matrix[i] << board[j][i]
     j += 1
   end
   i += 1
 end
 
 puts “Here are the columns to be checked! #{new_matrix}”
 return new_matrix
end

Это позволяет вам собирать каждый элемент с одинаковой позицией в разных строках. Каждая из этих коллекций подмассивов затем помещается в основной массив, предоставляя вам массив «столбцов» для использования.

Источники:





Что такое двойной массив — MATLAB Answers — MATLAB Central
Что такое двойной массив. Узнайте больше о массивахwww.mathworks.com