2010-02-02 14 views
5

Tengo este curso:¿Hay un built-in Ruby 1.8.7 para dividir una matriz en submapas del mismo tamaño?

def split_array(array,size) 
    index = 0 
    results = [] 
    if size > 0 
     while index <= array.size 
      res = array[index,size] 
      results << res if res.size != 0 
      index += size 
     end 
    end 
    return results 
end 

Si me quedo en [1,2,3,4,5,6] como split_array([1,2,3,4,5,6],3) se producirá esta matriz:

[[1,2,3],[4,5,6]]. ¿Hay algo disponible que pueda hacer esto en Ruby 1.8.7?

+0

posible duplicado de [necesidad de dividir las matrices a sub arrays de tamaño especificado en Ruby] (http://stackoverflow.com/questions/3864139/need- to-split-arrays-to-sub-arrays-of-specific-size-in-ruby) – Nakilon

Respuesta

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

Para 1.8.6:

require 'enumerator' 
[1,2,3,4,5,6].enum_for(:each_slice, 3).to_a 
+0

+1 Agradable, me ganaste con mi respuesta. :-P –

+0

¡Gracias por la respuesta! Sin embargo ... soy estúpido :). De hecho, tengo 1.8.6. ¿Sabes algo de eso también? – Geo

+0

Buena respuesta. Solución alternativa para Ruby 1.8.6 si "requiere" backports'' que definirá 'each_slice'. –

Cuestiones relacionadas