2010-04-23 9 views

Répondre

271

Jetez un oeil à Enumerable#each_slice:

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

C'est parfait. Merci! –

+1

Si simple, si rubis. J'ai utilisé 't = []; d.each_slice (3) {| s | t << s} ', ... pourquoi n'ai-je pas simplement essayé #to_a, merci l'homme. – Dorian

+0

Nice. J'ai utilisé quelque chose de similaire à 'foo.each_slice (3) .each_with_index {| f, i | met "# {f}, # {i}"} 'afin de travailler dans le tableau en tranches (ou" morceaux "). – user664833

31

Si vous utilisez des rails, vous pouvez également utiliser in_groups_of:

foo.in_groups_of(3) 
+10

noter que in_groups_of utilise each_slice et effectue également « padding » si vous n'avez pas besoin du rembourrage, puis aller avec each_slice – Urkle

+7

En fait, vous pouvez passer un second paramètre à in_groups_of, lui disant quoi pad avec, et si cela est faux, ça ne remballe pas. Donc, pas besoin de each_slice de toute façon. – FrontierPsycho

+3

Faites attention. Cela rend l'élément vide pour 'nil'. Par exemple, si vous faites 'arr = [0,1,2,3,4]' avec 'in_groups_of (3)', alors son résultat est '[[0,1,2], [3,4, nul] ] '. Dans certains cas, cela peut causer des problèmes. – Penguin

Questions connexes