Встроенный метод Ruby для создания многомерного массива из одномерного массива - PullRequest
1 голос
/ 15 января 2012

Если у меня есть такой массив: [0, 1, 2, 3, 4, 5], есть ли встроенный метод для создания этого: [[0, 1, 2], [3, 4, 5]] учитывая ширину 3? Если нет встроенного метода, как я могу улучшить это?

def multi_to_single(array, width)
    return [].tap{|md_array|
        (array.length.to_f / width).ceil.times {|y|
            row = (array[(y*width), width])
            md_array.push( row + Array.new(width - row.length))
        }
    }
end

Мне кажется, что я упустил что-то очевидное, потому что давно не программировал ruby! Заранее спасибо, эл.

РЕДАКТИРОВАТЬ: он должен быть в базовой библиотеке, так что никакой рубин на рельсах или что-то еще.

Ответы [ 2 ]

4 голосов
/ 15 января 2012

Я думаю, это то, что вы ищете:

[1,2,3,4,5,6].each_slice(3).to_a #=> [[1, 2, 3], [4, 5, 6]]

Использование ruby ​​1.9.2p136 (2010-12-25, редакция 30365)

1 голос
/ 15 января 2012

Вы можете использовать метод in_groups_of в Rails, который предназначен для решения этой проблемы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...