2010-04-23 14 views

Odpowiedz

271

Spójrz na Enumerable#each_slice:

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

To jest doskonały. Dzięki! –

+1

Tak prosty, więc rubinowy. Użyłem 't = []; d.each_slice (3) {| s | t << s} ', ... dlaczego po prostu nie spróbowałem #to_a, dzięki człowieku. – Dorian

+0

Nice. Użyłem czegoś podobnego do 'foo.each_slice (3) .each_with_index {| f, i | umieszcza "# {f}, # {i}"} 'w celu pracy z tablicą w plasterkach (lub" porcjach "). – user664833

31

Jeśli używasz szyn można również użyć in_groups_of:

foo.in_groups_of(3) 
+10

Zauważ, że in_groups_of używa each_slice, a także wykonuje "dopełnienie", jeśli nie potrzebujesz dopełnienia, a następnie idź z each_slice – Urkle

+7

Właściwie możesz przekazać drugi parametr in_groups_of, informując go o tym, na czym ma polegać, a jeśli jest to fałsz, nie pada. Tak więc nie ma potrzeby, aby each_slice tak czy inaczej. – FrontierPsycho

+3

Uważaj. Tworzy pusty element dla 'nil'. Na przykład, jeśli tworzysz 'arr = [0,1,2,3,4]' z 'in_groups_of (3)', to jego wynikiem jest '[[0,1,2], [3,4, nil] ] '. W niektórych przypadkach może to powodować pewne problemy. – Penguin

Powiązane problemy