2013-12-02 2 views
1

У меня есть большой массив Ruby, который я бы разделил на меньшие массивы. Меня не волнует, сколько элементов в каждом массиве, скорее, я забочусь о том, сколько массивов я получаю. Я буду показывать элементы в столбцах. Например, как я могу разделить массив на два или три меньших массива?Как разбить массив Ruby на определенное количество меньших массивов?

ответ

3

Если вы используете Rails (вы не говорите), вы можете использовать in_groups.

%w(1 2 3 4 5 6 7 8 9 10).in_groups(3) {|group| p group} 
["1", "2", "3", "4"] 
["5", "6", "7", nil] 
["8", "9", "10", nil] 

http://api.rubyonrails.org/classes/Array.html#method-i-in_groups

Или, если не рельсы, просто взять исходный код для этого метода ...

+0

Ах, это на самом деле функциональность, которую я хочу. За исключением того, что я не хочу писать «ниль». Синтаксис, который я использовал, - 'in_groups (3, false)' – Andrew

2

без перил, я хотел бы использовать each_slice:

2.0.0p247 :006 > arr = %w(1 2 3 4 5 6 7 8 9 10) 
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] 

2.0.0p247 :007 > n = 3 # how many arrays you want 
=> 3 

2.0.0p247 :009 > arr.each_slice((arr.size/n.to_f).ceil) {|slice| p slice };nil 
["1", "2", "3", "4"] 
["5", "6", "7", "8"] 
["9", "10"] 
=> nil 
+1

Это на самом деле противоположность тому, что я хочу. 'each_slice' - это когда вам нужно указать длину для каждого массива. Я полагаю, что могу сделать то, что хочу, с помощью 'each_slice (myarray.count/3)' – Andrew

+0

См. Мое обновление. Я обновил свой ответ на основе вашего комментария. – CDub

1
list = (1..10).to_a 
nsublists = 3 
sublists = [] 
list.each_slice((list.size.to_f/nsublists).ceil) { |slice| sublists << slice } 

sublists # => [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]] 
Смежные вопросы