Многомерные массивы

[А] Алексей Щёголев, 21 июля 2016, 19:51 , 3 подписчика

дошел до 8го урока, но так и не понял, как создать массив многомерный?

Ну ,то есть,например, мне нужно матрицу 5 на 5 в массив уложить. Как мне это сделать ?

И как будут с многомерными массивами работать всякие for in ?

Где об этом почитать ?

Обсуждение (4)


Вадим Венедиктов Учитель

[В]

Алексей, просто вложите пять массивов (с пятью элементами каждый) в массив :)

matrix_five_on_five = [
  [0,1,0,1,0],
  [1,0,1,0,1],
  [0,1,0,1,0],
  [1,0,1,0,1],
  [0,1,0,1,0]
]

В математике столбцы и строки матрицы обычно нумеруют с единицы, поэтому чтобы получить элемент A23 (элемент, стоящий на 2-й строке на 3-й позиции), нужно из каждого индекса отнять по единичке:

matrix_five_on_five[1][2]

Мы просто обращаемся ко второму элементу главного массива, а там — ещё один массив, вложыенный. Мы обращаемся к его 3-му элементу. Вот и всё ;)


Алексей Щёголев

[А]

так то да, но...

Вот мне нужна матрица. я еще не знаю, как она будет заполнена, но мне нужно туда складывать элементы в разные места. Как мне инициировать переменную?

Я пробовал что то типа вот такого...

string = []
matrix = []

matrix[1] << string
matrix[1][2] = 1

puts matrix[1][2].to_s

но результат работы = 0 но ожидалась, понятное дело единица.


Michael Butlitsky Учитель

[M]

В руби нет поддержки настоящих многомерных массивов. Но можно их имитировать с помощью массива массивов.

http://stackoverflow.com/questions/7014052/ruby-multidimensional-array

Твой пример просто с ошибками, вот так сработает:

string = []
matrix = []

matrix << string # добавляем в пустую матрицу первую строчку
matrix[0][2] = 1 # в матрице пока только 1 строка, нумерация идет с нуля!

puts matrix[0][2].to_s

Алексей Щёголев

[А]

Чорд. Индексация же с нуля!!!