
Ro
27.03.2018
02:29:26
вот, да
запомните на всякий случай
на интервью пригодится может когда. Кстати, запомните еще инициализацию двумерного массива:
[1] pry(main)> Array.new(5) { Array.new(10, 'X') }
=> [["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"]]
^ объявляется массив 5 строк на 10 столбцов
прикол в том, что можно легко ошибиться и написать так:
[15] pry(main)> Array.new(5, Array.new(10, 'X')) # НЕПРАВИЛЬНО
=> [["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"]]
Выглядит одинаково. Почему неправильно продемонстрирую:
[1] pry(main)> matrix = Array.new(5, Array.new(10, 'X')) # НЕПРАВИЛЬНО
=> [["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "X", "X", "X", "X", "X"]]
[2] pry(main)> matrix[3][5] = 'Y'
=> "Y"
[3] pry(main)> matrix
=> [["X", "X", "X", "X", "X", "Y", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "Y", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "Y", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "Y", "X", "X", "X", "X"],
["X", "X", "X", "X", "X", "Y", "X", "X", "X", "X"]]
т.е. вот этот Array.new(10, 'X') без блока создает 1 объект, который потом всегда используется (и один и тот же) для создания строк.