2010-04-23 13 views

Respuesta

271

Tome un vistazo a Enumerable#each_slice:

foo.each_slice(3).to_a 
#=> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["10"]] 
+2

Esto es perfecto. ¡Gracias! –

+1

Tan simple, tan ruby. Usé 't = []; d.each_slice (3) {| s | t << s} ', ... ¿por qué no intenté #to_a, gracias hombre? – Dorian

+0

Agradable. Usé algo similar a 'foo.each_slice (3) .each_with_index {| f, i | pone "# {f}, # {i}"} 'para trabajar a través de la matriz en secciones (o" fragmentos "). – user664833

31

Si está utilizando rieles también se puede utilizar in_groups_of:

foo.in_groups_of(3) 
+10

tenga en cuenta que in_groups_of usa each_slice y también realiza "relleno" si no necesita el relleno, luego vaya con each_slice – Urkle

+7

En realidad, puede pasar un segundo parámetro a in_groups_of, diciéndole con qué rellenar, y si eso es falso, no almohadilla Entonces, no hay necesidad de each_slice de ninguna manera. – FrontierPsycho

+3

Ten cuidado. Hace un elemento vacío para 'nil'. Por ejemplo, si usted hace 'arr = [0,1,2,3,4]' con 'in_groups_of (3)', entonces su resultado es '[[0,1,2], [3,4, nil] ] '. En algunos casos, puede causar algunos problemas. – Penguin

Cuestiones relacionadas